2012-10-24 52 views
12

解決由官方文檔建議複製衝突的方式是:解決複製衝突已刪除的文件在CouchDB中

  1. 使用文檔的_conflicts場(通過如視圖)
  2. 獲取所有版本文檔閱讀衝突的修訂上市
  3. 執行應用程序特定合併
  4. 刪除不需要修改

問題出現在我想合併時刪除文件。他們不出現在_conflicts字段中,但在_deleted_conflicts。如果我只合併使用_conflicts字段,並且在本地數據庫中刪除文檔並在遠程副本中進行編輯,則它將在複製時在本地復活。我的應用程序模型假設合併時始終優先刪除:刪除的文檔會保留刪除狀態,無論它與哪些編輯衝突。

因此,乍一看,最簡單的事情是檢查_deleted_conflicts是否爲空,如果它不是空的,刪除文檔,對吧?那麼...問題在於,這也可能包含通過解決第4步中的編輯衝突引入的已刪除修訂,因此在這種情況下_deleted_conflicts的含義不明確。

處理CouchDB中的刪除衝突(如果有的話)的規範方式不涉及到將文檔標記爲已刪除和在應用程序層進行過濾等粗略內容?

回答

5

最好的解決方案是使用保留屬性_deleted刪除文檔而不是HTTP DELETE。然後,你可以自由地也設置其他屬性:

doc._deleted = true; 
doc.deletedByUser = true; 
doc.save(); 

然後在合併過程中檢查_changes飼料爲_deleted_conflicts和刪除文件,如果有_deleted_conflicts內的修訂具有deletedByUser標誌設置爲true

我希望這有助於!