当revs_limit大于0时,PouchDB不同步删除

rap*_*dko 2 couchdb pouchdb

我有一个本地的pouchDB任务。直到我尝试设置与IBM Cloudant noSQL的同步之前,它都运行良好。到目前为止,主要的问题在于remove()方法,我这样编写:

$(document).on("click","#taskList li .delete", function(){

    db.remove(id,rev);
    refreshTasks();

});
Run Code Online (Sandbox Code Playgroud)

当关闭同步后,该方法可以完美工作,但是一旦我激活以下各行的同步,就不会从本地和远程删除任务。我正在运行PouchDB与以下代码同步:

db.sync(remote_db, {
  live: true,
  retry: true
}).on('change', function (change) {
  // yo, something changed!
}).on('paused', function (info) {
  // replication was paused, usually because of a lost connection
}).on('active', function (info) {
  // replication was resumed
}).on('error', function (err) {
  // totally unhandled error (shouldn't happen)
});
Run Code Online (Sandbox Code Playgroud)

我的数据库就是这样创建的:

var db = new PouchDB('tasks', {revs_limit: 1, auto_compaction: true});
Run Code Online (Sandbox Code Playgroud)

现在,当我创建revs_limit为0的数据库时,它将再次工作。

可能会发生什么?

Wil*_*ley 5

从Pouch中删除文档时,基础操作类似于更新-更新包含删除的“逻辑删除”修订版,必须将其同步回服务器。

通过设置revs_limit:1,本地数据库将仅跟踪每个文档的最新修订,包括此删除,因此在同步发生时,它将不知道将删除附加到哪个父修订。这不是Couch / Cloudant中的错误情况-只会在服务器上创建冲突的文档。

我建议创建数据库而不更改默认值revs_limit。确实,唯一有意义的方案是当您拥有不可变的文档时-即它们永远不会被更新/删除。