2011-03-23 66 views
4

我知道CouchDB識別複製後發生衝突的文檔。 _design文檔中的CouchDB處理衝突檢測的方式與普通文檔不同嗎?例如,我修改DB1中的_design文檔。然後我在DB2中修改相同的_design文檔。然後我將DB1複製到DB2。我希望CouchDB能夠識別衝突,但是在複製之後,Couch不返回任何衝突。CouchDB _design文檔衝突檢測

回答

3

設計文件與普通文件完全相同,因此命名爲「設計文件」而不是「沙發計劃」等。

如果您對不同數據庫中的相同文檔進行了相同的修改,您將有沒有衝突。運行couchapp push可能會造成這種情況,如果您將相同的應用程序推送到兩個不同的數據庫(並且它們具有相同的_rev開頭)。

否則,無論是設計文檔還是沒有,您都會遇到衝突。當然,沙發會將「修正版」作爲規範版本「推廣」,但如果您在視圖中檢查_conflicts,則會看到它們。 (要查看設計文件的視圖,您還必須啓用include_design選項。)

{ "_id": "_design/example" 
, "views": 
    { "conflicts": 
    { "options": {"include_design": true} 
    , "map": "function(doc) { if(doc._conflicts) emit(doc._id, doc._conflicts); }" 
    } 
    } 
} 

查找使用鍵範圍掃描衝突的ddocs:

?startkey="_design/"&endkey="_design0" 
+0

我們有_conflicts爲我們所有的non_design視圖文檔。但是,_design文檔不適用於視圖。有關如何在成功複製後獲得衝突中所有_design文檔列表的任何建議將不勝感激。謝謝。 – JimZ 2011-03-24 13:26:31

+0

我更新了答案。設計文檔* do *可以處理視圖,但是這是一個可選設置,默認值爲'false'。一旦你激活它,你會看到ddoc衝突。 (你也可以把它放在一個完全獨立的視圖中,由你決定。) – JasonSmith 2011-08-19 01:36:31

+0

我不得不在視圖旁邊放置選項,而不是在視圖中,然後影響所有視圖。我正在使用1.2.0版本,並且在更改日誌中沒有看到任何內容,表明可以在各個視圖中放置選項。 – 2014-03-18 11:33:19