react-native - Pouchdb query() 在 emit() 上遗漏文档
问题描述
由于某种原因,我的过滤器无法正常工作。刚才它工作正常,然后由于某种原因它停止返回所有模板,只开始返回其中一个。
为什么它可能会退回两次但只给我一个?
我有以下代码:
export async function testMe() {
const company_id = await AsyncStorage.getItem('company_id');
const device_db = new PouchDB(company_id, {});
device_db.query(function(doc, emit){
console.log(doc.type, doc._id, doc._rev);
if(doc.type == 'template') {
emit(doc._id, doc);
}
}).then((result) => {
console.log("Returned", result);
})
}
出乎意料的是,这就是返回的内容:
template template_1 18-5918af4c5370d9755d0bb8b6dcb21ea1
template template_2 19-8191dec49dfa8c1a2f03d752a193f09e
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
undefined "dpbcab6843-2cdf-4d4c-87ae-286dcddaac22" "2-8f03f3127771dadd3c8f7beb3e827982"
undefined "dpdc6f6cd0-6c6d-4974-a166-b848a0217af4" "2-0eec1a8d925641aa8bf30e058e6515e7"
undefined "dpe1573a70-a281-4e15-a997-82d8bf8fabfa" "2-d3bbcb81344f61cc94459610695c6670"
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
您可以忽略未定义的,但我要展示的是查看两次返回的内容:
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
在Returned
console.log() 中,这是唯一返回的内容(最后一个 template_3 数据,完全忽略其他模板,即使它们都是 type template
):
{"total_rows":6,"offset":0,"rows":[{"key":"template_3","id":"template_3","value":{..}}]}
编辑
越来越奇怪了。我刚刚打开template_2
并进行了保存(在 Cloudant 中)并将其与我的设备同步以更新_rev
,现在我得到:
template template_1 18-5918af4c5370d9755d0bb8b6dcb21ea1
template template_2 20-c549fe868735ef0099b80f6668af611c
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
undefined "dpbcab6843-2cdf-4d4c-87ae-286dcddaac22" "2-8f03f3127771dadd3c8f7beb3e827982"
undefined "dpdc6f6cd0-6c6d-4974-a166-b848a0217af4" "2-0eec1a8d925641aa8bf30e058e6515e7"
undefined "dpe1573a70-a281-4e15-a997-82d8bf8fabfa" "2-d3bbcb81344f61cc94459610695c6670"
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
template template_2 20-c549fe868735ef0099b80f6668af611c
返回(省略template_3):
{"total_rows":6,"offset":0,"rows":[{"key":"template_2","id":"template_2","value":{..}}]}
编辑 2
我补充说:
.catch((err) => {
console.log(err);
})
得到这个:{"status":409,"name":"conflict","message":"Document update conflict","error":true}
但是,我执行以下操作,所有_conflict
数组都是空的:
device_db.allDocs({conflicts: true})
.then((data) => {
for (let d of data.rows) {
console.log(d.doc._conflicts);
}
});
解决方案
我相信像这样的临时查询应该有一个键,否则查询将不知道您要选择哪些文档。PouchDb 文档中的示例是
db.query(function (doc, emit) {
emit(doc.name);
}, {key: 'foo'}).then(function (result) {
// found docs with name === 'foo'
}).catch(function (err) {
// handle any errors
});
以便查询返回“name”字段等于“foo”的文档。在您的查询中,键似乎未定义。这可以解释你得到的奇怪结果吗?
推荐阅读
- visual-c++ - 从 mfc 扩展 dll 导出的无模式对话框不显示
- python - KeyError 即使密钥存在
- python - 没有功能卡住的阶乘问题
- python - 获取对象中带有硒的页面的 URl 的方法 - 出错
- spring-boot - 检索新列表具有先前保存的不完整关联对象
- azure-blob-storage - 如何使用 java sdk 执行 azure 存储服务 blob 取消删除?
- python - 在 Python 中打印大字符串需要太多时间
- python - 如何在确定神经网络的输出时找到每个输入的重要性?
- php - htaccess 文件 - 如何重定向到某个链接而不是网站?
- docker - 无法在 k8s 中的 CentOS7 中重新启动 docker