【问题标题】:PouchDb / CouchDb conflict issuePouchDb / CouchDb 冲突问题
【发布时间】:2016-08-09 09:20:18
【问题描述】:

我正在使用带有 CouchDb 后端的 PouchDb,并且在网站启动时在客户端上,我正在插入一个与服务器中的文档具有相同“id”的文档(在数据库同步之前)。

这很好,因为它是同一个文档,但是 PouchDb 文档是 _rev: 1 并且 couchDb 文档可能会说 _rev: 2,当我的 PouchDb 确实同步并且我尝试再次获取文档时,我遇到了冲突。

然后我在客户端:

{ _id: 'mydoc', _rev: '1-xxxxxxxxx' } AND { _id: 'mydoc', _rev: '2-xxxxxxxxx' }

但正确的版本实际上是 _rev: 1(因为这是客户端首先创建的版本)。

如何在客户端上正确解决此问题以解决冲突?

【问题讨论】:

    标签: couchdb pouchdb


    【解决方案1】:

    你有两个选择:

    首先,创建具有不同 ID 的文档。这取决于应用程序;也许这不可能或不适合您的情况。

    其次,您需要代码来删除文档的“错误”版本。 (您可以在客户端或服务器上执行此操作。在这两种情况下,更新都会复制到另一个系统。)

    例如,如果您的客户端应用程序知道修订版 1 是正确的,那么当您看到有冲突的修订版时,请删除除正确的修订版之外的所有修订版。这些删除操作将复制到 CouchDB,很快您将只有一个正确的修订版本。

    【讨论】:

    • 所以我正在使用这个插件“github.com/jo/pouch-resolve-conflicts”但是使用上面的数据它在设置 _rev: 2 和 _deleted: true 并保留 _rev: 1 时在 db.bulkDocs 上出错。我考虑过将“new_edits: false”与 bulkDocs 一起使用来强制放置,但我认为这可能是个坏主意。
    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多