我想,如下所述实施过程:PouchDB在成功复制删除文件CouchDB的
- 创建在设备中的文件
sale_transaction
。 - 将
sale_transaction
文档放在邮袋中。 - 因为有袋&沙发之间的实时复制,让
sale_transaction
文件流沙发上。 - 一旦
sale_transaction
文档沙发的成功复制,删除袋文档。 - 请勿让袋中的
deleted sale_transaction
文档流过沙发。
目前,我已经在两个数据库中实现了双向同步,在这两个数据库中,我正在过滤从Couch到Pouch的每个文档,反之亦然。
对于从Couch复制到Pouch,我不想让sale_transaction
文档通过,因为我只能从Couch获取这些文档。
PouchDb.replicate(remoteDb, localDb, {
// Replicate from Couch to Pouch
live: true,
retry: true,
filter: (doc) => {
return doc.doc_type!=="sale_transaction";
}
})
虽然从袋到沙发上复制,我把一个过滤器,不要让deleted sale_transaction
证件办理。
PouchDb.replicate(localDb, remoteDb, {
// Replicate from Pouch to Couch
live: true,
retry: true,
filter: (doc) => {
if(doc.doc_type==="sale_transaction" && doc._deleted) {
// These are deleted transactions which I dont want to replicate to Couch
return false;
}
return true;
}
}).on("change", (change) => {
// Handle change
replicateOutChangeHandler(change)
});
我也实现了一个变化处理程序来删除袋的sale_transaction
文件,写入到沙发后。
function replicateOutChangeHandler(change) {
for(let doc of change.docs) {
if(doc.doc_type==="sale_transaction" && !doc._deleted) {
localDb.upsert(doc._id, function(prevDoc) {
if(!prevDoc._deleted) {
prevDoc._deleted = true;
}
return prevDoc;
}).then((res)=>{
console.log("Deleted Document After Replication",res);
}).catch((err)=>{
console.error("Deleted Document After Replication (ERROR): ",err);
})
}
}
}
数据的流动,似乎首先是工作,但是当我从沙发上sale_transaction
文档,然后做一些编辑,我将不得不重复写入袋文档的过程,然后让它流向沙发,然后将其删除。但是,在用相同的文档进行一些编辑之后,Couch中的文档也被删除。
我相当新的袋子&沙发,特别是在NoSQL,并想知道如果我在这个过程中做错了什么。
为什么不简单地在内存中编辑/创建文档,并将它们直接推送到CouchDB? –
@AlexisCôté我正在考虑设备无法访问互联网的情况。因此,如果我将文档推送到Pouch,并且没有互联网连接,我依靠Pouch的本地复制将文档同步到Couch。 – aamiel16