に成功したレプリケーション時に文書を削除します。PouchDBは、私は以下のような処理を実装しようとしていますCouchDBの
- デバイスで
sale_transaction
文書を作成します。 sale_transaction
文書をポーチに入れてください。- ポーチ&ソファの間にライブレプリケーションが存在するため、
sale_transaction
のドキュメントをソーラーに流してください。 sale_transaction
文書をCouchに正しく複製するには、文書をPouchで削除します。- ポーチの中の
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