2016-10-14 21 views
0

我正在构建一个应用程序,用户可以在其中输入一个单词。假设这样的话是汽车品牌。基于这个汽车品牌,我想获得每个工厂的工人数量。我在PouchDB数据库中的结构是每个文档代表一个工厂,文档包括工人数量和品牌名称。这些ID是日期时间,所以它们对查询没有帮助。在PouchDB视图的条件下获取并更新用户输入

这是我现在创建的代码:

function getWorkers() { 
        //Get and remove current design doc 
        factoryDB.get('_design/workers').then(function (doc) { 
         return factoryDB.remove(doc) 

        //Create new design doc and put it to the db 
        }).then(function() { 
        var designWorkers = { 
          _id: '_design/workers', 
          views: { 
          'workersView': { 
           map: function(doc) { 
            if (doc.Brand === $('#input').val()) { 
             emit(doc.workers,doc);} 
           }.toString() 
          } 
          } 
         }; 
         return factoryDB.put(designWorkers); 

        //Now start the query 
        }).then(function() { 
        return factoryDB.query('workersView') 

        //And get the results 
        }).then(function(result) { 
         console.log(result) 
        }).catch(function (err) { 
         console.log(err) 
        }); 
       }; 

的函数被调用当用户点击一个按钮。 这是第一次正常工作。但是,一旦我改变了这个词,它仍然返回上一个查询的结果。例如:

首先用户输入“Mercedes”,所有带有“Mercedes”的工厂文件将被退回。但是,如果我现在删除它,而是写上“奥迪”,我仍然可以得到“奔驰”的文件。我真的不明白,因为我认为我再次调用函数时会删除以前的设计文档,因此输入值也会发生变化。

我在这里做错了什么?

回答

0

我找到了解决我的问题的方法之一。 取而代之的是:

if (doc.Brand === $('#input').val()) { 
    emit(doc.workers,doc);}.toString() 

我通过了条件查询:

function(doc) { 
    if (doc.Brand) { 
     emit(doc.Brand,doc.workers);} 
    }.toString() 
. 
. 
. 
return factoryDB.query('workersView', key: {$('#input').val()}) 

然而,剩下的问题是,它查询过的所有文件,而之前的一个是在已经过滤地图功能(total_rows属性较大)。也许有人可以给我比我更好的解决方案。