我正在尝试实现以下过程:
1. 在设备中创建一个“sale_transaction”文档。 2. 将“sale_transaction”文档放入Pouch中。 3. 由于Pouch和Couch之间存在实时复制,让“sale_transaction”文档流动到Couch。 4. 成功将“sale_transaction”文档复制到Couch后,在Pouch中删除该文档。 5. 不要让已删除的“sale_transaction”文档通过Couch流动。
目前,我已经从两个数据库实现了双向同步,其中我正在过滤从Couch到Pouch以及反过来的每个文档。
对于从Couch到Pouch的复制,我不想让“sale_transaction”文档通过,因为我可以直接从Couch获取这些文档。
1. 在设备中创建一个“sale_transaction”文档。 2. 将“sale_transaction”文档放入Pouch中。 3. 由于Pouch和Couch之间存在实时复制,让“sale_transaction”文档流动到Couch。 4. 成功将“sale_transaction”文档复制到Couch后,在Pouch中删除该文档。 5. 不要让已删除的“sale_transaction”文档通过Couch流动。
目前,我已经从两个数据库实现了双向同步,其中我正在过滤从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";
}
})
在从Pouch到Couch的复制过程中,我添加了一个过滤器,以防止已删除的销售交易
文档通过。
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
文档从Pouch中删除,在被写入Couch之后。
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);
})
}
}
}
一开始数据的流动似乎是正常的,但当我从Couch获取sale_transaction
文档并进行编辑后,我必须重复将文档写入Pouch的过程,然后让它流向Couch,最后在Pouch中删除它。但是,在对同一文档进行一些编辑后,Couch中的文档也被删除了。
我在Pouch和Couch方面比较新手,尤其是在NoSQL方面,想知道我在这个过程中是否做错了什么。