【问题标题】:Couchbaselite change Changes returns all objects even though only one document was changedCouchbaselite change Changes 返回所有对象,即使只更改了一个文档
【发布时间】:2020-09-20 07:07:20
【问题描述】:

我正在开发一个 couchbase lite 驱动的应用程序,并尝试基于来自 couchbase mobile lite 的 help 进行实时查询。

虽然它有效,但我对报告为已更改的文档数量感到困惑。这仅在我的笔记本电脑中,所以我通过 cbimport 将 json 文件上传到了 couchbase 服务器。然后同步网关确实将所有数据成功同步到我的 android 应用程序。

现在,我在 couchbase 服务器中更改了一个文档,但所有 27 个文档都在实时查询中返回为更改。我希望只有我已更改的文档以自上次同步时间以来已更改的形式返回。

查看每个文档的元信息,我更改的文档有以下内容:

{
  "meta": {
    "id": "Group_2404_159_5053",
    "rev": "15-16148876737400000000000002000006",
    "expiration": 0,
    "flags": 33554438,
    "type": "json"
  },
  "xattrs": {
    "_sync": {
      "rev": "7-ad618346393fa2490359555e9c889876",
      "sequence": 2951,
      "recent_sequences": [
        2910,
        2946,
        2947,
        2948,
        2949,
        2950,
        2951
      ],
      "history": {
        "revs": [
          "3-89bb125a9bb1f5e8108a6570ffb31821",
          "4-71480618242841447402418fa1831968",
          "5-4c4d990af34fa3f53237c3faafa85843",
          "1-4fbb4708f69d8a6cda4f9c38a1aa9570",
          "6-f43462023f82a12170f31aed879aecb2",
          "7-ad618346393fa2490359555e9c889876",
          "2-cf80ca212a3279e4fc01ef6ab6084bc9"
        ],
        "parents": [
          6,
          0,
          1,
          -1,
          2,
          4,
          3
        ],
        "channels": [
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ]
      },
      "cas": "0x0000747376881416",
      "value_crc32c": "0x8c664755",
      "time_saved": "2020-06-01T14:23:30.669338-07:00"
    }
  }
}

而其余 26 个文档与此类似:

{
  "meta": {
    "id": "Group_2404_159_5087",
    "rev": "2-161344efd90c00000000000002000006",
    "expiration": 0,
    "flags": 33554438,
    "type": "json"
  },
  "xattrs": {
    "_sync": {
      "rev": "1-577011ccb4ce61c69507ba44985ca038",
      "sequence": 2934,
      "recent_sequences": [
        2934
      ],
      "history": {
        "revs": [
          "1-577011ccb4ce61c69507ba44985ca038"
        ],
        "parents": [
          -1
        ],
        "channels": [
          null
        ]
      },
      "cas": "0x00000cd9ef441316",
      "value_crc32c": "0xc37bb792",
      "time_saved": "2020-05-28T11:34:50.3200745-07:00"
    }
  }
}

这是预期的行为还是我可以做些什么?

【问题讨论】:

    标签: couchbase couchbase-lite couchbase-sync-gateway


    【解决方案1】:

    这种行为符合预期。每次发生影响查询结果的数据库更改时,实时查询都会重新运行查询。因此,在您的情况下,由于它是一个获取数据库中所有文档的查询,因此当数据库中的任何文档发生更改并返回所有文档(这就是查询的目的)时,查询会重新运行。

    如果您的查询有过滤谓词,则最适合实时查询。例如,如果应用程序想要在“foo”类型的文档中的状态字段发生变化时得到通知。在这种情况下,只有在“foo”类型的文档中状态字段发生更改时才会通知您。

    在您的情况下,如果您只关心数据库中的任何文档发生更改时的更改,则应该使用Database Change Listener

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2020-10-18
      • 2019-07-10
      • 1970-01-01
      • 2022-11-15
      相关资源
      最近更新 更多