根據CouchDB Wiki on PUT operations。批量更新每個文檔沒有_rev值的CouchDB數據庫?
要更新現有文檔,還要發出PUT請求。在這種情況下,JSON主體必須包含一個_rev屬性,它允許CouchDB知道編輯所依據的修訂版本。如果當前存儲在數據庫中的文檔修訂版不匹配,則返回409衝突錯誤。
我的目標是執行bulk_docs更新:
curl -X POST [domain]/[couch db name]/_bulk_docs -H "Content-type: application/json" -d @[some document].json
我的工作流程是這樣的:
- 我的數據是在谷歌文檔電子表格。
- 我轉換電子表格數據,以JSON通過複製並粘貼到Mr. Data Converter
- 我使用捲曲(如上圖所示)來添加/更新文檔
的問題是,我第一次添加新文檔,一切工作完美,但下次我張貼相同的文件,我得到每個文件的以下錯誤:
... {「id」:「28」,「error」:「conflict」,「reason 「:」文檔更新衝突。「} ...
有什麼方法可以更新現有文檔,而不包括_rev屬性?
更新處理程序似乎是更新數據的方法。它會更快,因爲您不必下載每個文檔,將它合併到客戶端,然後再次上傳。相反,更新處理程序可以爲您完成1/3的網絡活動! –
@DobesVandermeer不是通用的。由於更新處理程序不支持批處理操作,所以這是每次更新/持續的一個請求。如果您需要同時執行2-4個以上的操作,請執行批處理操作,因爲通常需要2-4次請求,具體取決於具體情況,例如更新10個文檔。當然,如果你使用'new_edits':false',你可以在1個請求中進行批量持久化/替換,但是請注意'new_edits'是[旨在被複制器使用](http://goo.gl/EFFofn )。一個缺點是,它不保留修訂歷史,我想知道如果這可能會干擾複製... –
@DominykasMostauskis啊是的,好點。 OP可能想要進行批量下載,計算新值和批量上傳,這是總體上較少的事務。只要這一切都適合內存。 –