我有一个本地任务。在我尝试与IBM Cloudant Nosql建立同步之前,工作得很好。到目前为止,主要问题是删除((方法,我这样写了:
$(document).on("click","#taskList li .delete", function(){
db.remove(id,rev);
refreshTasks();
});
当同步关闭时,该方法可以很好地工作,但是一旦我激活下面的行,它就不会从本地和远程删除任务。我正在与此代码同步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)
});
我的数据库是由此创建的:
var db = new PouchDB('tasks', {revs_limit: 1, auto_compaction: true});
现在,当我使用revs_limit创建数据库时,它再次工作。
可能会发生什么?
从袋中删除文档时,基础操作类似于更新 - 更新包含删除"墓碑"修订版,必须将其同步回到服务器。
通过设置revs_limit:1
,本地数据库只能跟踪每个文档的最新修订版,包括此删除,因此当同步发生时,它将不知道将删除附加到哪个父修订。这不是Couch/Cloudant中的错误条件 - 它将仅在服务器上创建一个冲突的文档。
我建议在不更改默认revs_limit
的情况下创建数据库。确实,唯一有意义的情况是当您拥有不变的文档时 - 即永远不会更新/删除它们。