我想,如下所述實施過程: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