javascript - 更新文档时的 pouchDB query() 错误
问题描述
假设我有这三个文件:
{ "_id": "11111", "type": "template", "name": "person" }
{ "_id": "22222", "type": "template", "name": "place" }
{ "_id": "33333", "type": "template", "name": "thing" }
我有一个云数据库,然后我有一个从该数据库同步 pouchDB 的设备。
这些是我要做的步骤:
- 我将两个数据库同步在一起。因此,现在我的设备上有本文档的最新版本。
- 我运行下面的查询,我得到了所有三个模板,如下所示:
代码
var template_obj = {};
return device_db.query('filters/templates')
.then((templates) => {
for (let t of templates.rows) templates_obj[t.id] = true;
return templates_obj;
});
过滤器/模板
function (doc) {
if(doc.type == "template")
emit(doc._id);
}
返回
{ "11111": true, "22222": true, "33333": true }
我更新模板:云上的人。然后我再次更新它。所以 2 次修订已经过去,但没有同步到我的设备。
我与我的设备同步。
- 现在,当我运行相同的查询时,我只取回我编辑的文档。这很奇怪,因为我没有触及任何其他文件。相同的视图会在云端返回预期结果,但不会在设备上返回。
返回
{"11111": true}
- 但是,如果我执行以下代码,所有模板都会正常返回,并且来自云的相同模板会
_rev
显示在设备上。意味着同步成功并且视图变得混乱。
新代码
return device_db.allDocs({conflicts: true})
.then((data) => {
for (let d of data.rows) {
if(d.doc.type == "template") {
templates_obj[d.doc._id] = true;
}
}
return templates_obj;
}).catch((err) => {
console.log(JSON.stringify(err));
})
我开始相信这是一个错误,因为如果我破坏我的数据库并再次执行这些步骤,我可以重现此问题。
解决方案
在意识到你在使用 React Native 之后,我认为这实际上与 React Native 中的 PouchDB 有关,并且确实是一个错误。有几个关于这种行为的报告:
推荐阅读
- javascript - Eclipse 2020-06 Javascript - 语法高亮不工作
- ibm-integration-bus - IBM App Connect Enterprise - 没有 IBM MQ 的服务编排
- javascript - 带有空格和 '.' 的字符串值 正在转换为有效的 JavaScript 日期时间
- ibm-mq - MQ | 频道 RETRYING 状态
- ruby-on-rails - 如何测试动作文本?如何在 yml 中添加动作文本?
- intellij-idea - Intellij“在路径中查找”只有“目录”的结果,但没有项目、模块或范围的结果
- java - 返回给定范围内较大的值
- python - 在python中移动选定的月份
- oracle - 当文件名中有日期时如何在INFILE中连接日期
- python - YouTube 搜索 - 脚本多次正常运行,然后出现错误