2011-09-29 66 views

回答

5

我假設你想要在你的數據庫中獲得一個包含衝突的文檔,而不是409衝突響應?

$ curl http://localhost:5984/scratch/foo -X PUT -H "Content-Type: application/json" -d '{}' 
{"ok":true,"id":"foo","rev":"1-967a00dff5e02add41819138abb3284d"} 

然後使用與all_or_nothing批量文檔API:true選項更新與故意損壞或沒有_rev相同的文檔,添加

因此,與已知的_id數據庫中創建的文檔

$ curl http://localhost:5984/scratch/_bulk_docs -X POST -H "Content-Type: application/json" -d '{"all_or_nothing": true, "docs": [{"_id": "foo", "abc": 123}]}' 
[{"id":"foo","rev":"1-15c813a2b4b312c6915821b01a1986c5"}] 

您應該然後在文檔中有衝突:

$ curl http://localhost:5984/scratch/foo?conflicts=true 
{"_id":"foo","_rev":"1-967a00dff5e02add41819138abb3284d","_conflicts":["1-15c813a2b4b312c6915821b01a1986c5"]} 
的良好措施有些不同文件的屬性

您也可以使用?new_edits=false作爲described by CouchDB committer Randall Leeds執行正常查詢。

$ curl http://localhost:5984/scratch?new_edits=false -X POST -H "Content-Type: application/json" -d '{"_id": "foo", "abc": 123}' 
+0

+1。我冒昧地添加了我最近學到的另一種技術。 – JasonSmith

0

只需發佈兩個具有相同_id屬性的文檔。這會產生衝突,因爲第二個文檔不包含正確的_rev屬性。請記住,您需要在後續每篇文章中包含最新的_rev屬性,以便CouchDB知道您是最新的。

此外,您可以在同一臺服務器上創建兩個數據庫並在這兩個數據庫之間進行復制。

+0

是的,這兩個數據庫的方法將工作。我不明白具有相同_id方法的兩個文檔如何工作。你不會在第二個PUT上得到409衝突嗎? – nicka773

+0

啊,誤讀你希望它模擬複製。對不起! – pokstad

相關問題