在 PouchDB 视图的条件下获取和更新用户输入
Get and update user input in condition of PouchDB view
我正在构建一个用户可以在其中输入单词的应用程序。比方说这些词是汽车品牌。基于这个汽车品牌,我想获得每个工厂的工人数量。我在 PouchDB 数据库中的结构是每个文档代表一个工厂,文档包括工人数量和品牌名称。 ID 是日期时间,因此它们对查询没有帮助。
这是我现在创建的代码:
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"的工厂文件。但是,如果我现在删除它并改为写 "Audi",我仍然会得到 "Mercedes" 的文档。我不是很明白,因为我以为每当再次调用该函数时我删除了以前的设计文档,因此输入值也发生了变化。
我做错了什么?
我找到了解决问题的方法。
而不是这个:
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()})
但是,剩下的问题是,它查询所有文档,而之前的已经在map函数中过滤了(total_rows
属性更大)。也许有人仍然可以给我一个比我更好的解决方案。
我正在构建一个用户可以在其中输入单词的应用程序。比方说这些词是汽车品牌。基于这个汽车品牌,我想获得每个工厂的工人数量。我在 PouchDB 数据库中的结构是每个文档代表一个工厂,文档包括工人数量和品牌名称。 ID 是日期时间,因此它们对查询没有帮助。
这是我现在创建的代码:
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"的工厂文件。但是,如果我现在删除它并改为写 "Audi",我仍然会得到 "Mercedes" 的文档。我不是很明白,因为我以为每当再次调用该函数时我删除了以前的设计文档,因此输入值也发生了变化。
我做错了什么?
我找到了解决问题的方法。 而不是这个:
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()})
但是,剩下的问题是,它查询所有文档,而之前的已经在map函数中过滤了(total_rows
属性更大)。也许有人仍然可以给我一个比我更好的解决方案。