首页 > 解决方案 > 更新文档时的 pouchDB query() 错误

问题描述

假设我有这三个文件:

{ "_id": "11111", "type": "template", "name": "person" }
{ "_id": "22222", "type": "template", "name": "place" }
{ "_id": "33333", "type": "template", "name": "thing" }

我有一个云数据库,然后我有一个从该数据库同步 pouchDB 的设备。

这些是我要做的步骤:

  1. 我将两个数据库同步在一起。因此,现在我的设备上有本文档的最新版本。
  2. 我运行下面的查询,我得到了所有三个模板,如下所示:

代码

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 }
  1. 我更新模板:云上的人。然后我再次更新它。所以 2 次修订已经过去,但没有同步到我的设备。

  2. 我与我的设备同步。

  3. 现在,当我运行相同的查询时,我只取回我编辑的文档。这很奇怪,因为我没有触及任何其他文件。相同的视图会在云端返回预期结果,但不会在设备上返回。

返回

{"11111": true}
  1. 但是,如果我执行以下代码,所有模板都会正常返回,并且来自云的相同模板会_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));
})

我开始相信这是一个错误,因为如果我破坏我的数据库并再次执行这些步骤,我可以重现此问题。

标签: javascriptreact-nativecouchdbpouchdbcloudant

解决方案


在意识到你在使用 React Native 之后,我认为这实际上与 React Native 中的 PouchDB 有关,并且确实是一个错误。有几个关于这种行为的报告:


推荐阅读