2014-06-27 40 views
0

我有難的話題一個非常簡單的問題:PouchDB +解決衝突

如何在PouchDB解決衝突的工作?

我看了看文檔,也很快用Google搜索,但沒有幫助。那麼,我該如何處理使用PouchDB的應用程序中的衝突管理?

回答

4

以下是您如何在CouchDB中執行此操作,您可以直接將其轉換爲PouchDB條款,因爲API完全相同。

你獲取了一個文件,使用conflicts=true索要衝突(get()在PouchDB {conflicts:true}):

http://localhost:5984/db1/foo?conflicts=true 

,您會收到一份文件是這樣的:

{ 
"_id":"foo", 
"_rev":"2-f3d4c66dcd7596419c76b2498b3ba21f", 
"notgonnawork":"this is from the second db", 
"_conflicts":["2-c1592ce7b31cc26e91d2f2029c57e621"] 
} 

有衝突從另一個數據庫引入,並且該數據庫的修訂已(隨機)獲勝。如果您使用雙向複製,則兩個數據庫都會提供相同的答案。

請注意,兩個修訂都以「2-」開頭。這表明它們都是對文檔的第二次修訂,並且它們都與修訂樹的同一級別。

使用修訂ID,您在PouchDB取衝突版本(get(){rev=...}

http://localhost:5984/db1/foo?rev=2-c1592ce7b31cc26e91d2f2029c57e621 

您會收到:

{ 
"_id":"foo", 
"_rev":"2-c1592ce7b31cc26e91d2f2029c57e621", 
"notgonnawork":"this is from the first database" 
} 

呈現兩種相互矛盾的版本以供用戶後,你可以在PUTput())的基礎上進行第三次修改。你的第三個版本可以結合結果,選擇失敗者,o無論你想要什麼。

高級閱讀:

+0

感謝您的回答。但問題更多 - 如何在活動複製時同步項目? – dimko1

+0

有關活動複製期間衝突解決的教程,請參閱:http://stackoverflow.com/questions/18434686/pouchdb-how-to-resolve-conflicts-with-continuous-replication –