我有一个本地的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的数据库时,它将再次工作。
可能会发生什么?
从Pouch中删除文档时,基础操作类似于更新-更新包含删除的“逻辑删除”修订版,必须将其同步回服务器。
通过设置revs_limit:1,本地数据库将仅跟踪每个文档的最新修订,包括此删除,因此在同步发生时,它将不知道将删除附加到哪个父修订。这不是Couch / Cloudant中的错误情况-只会在服务器上创建冲突的文档。
我建议创建数据库而不更改默认值revs_limit。确实,唯一有意义的方案是当您拥有不可变的文档时-即它们永远不会被更新/删除。
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |