我可能只是在明顯的doco中錯過了它,但我無法弄清楚如何使用CouchRest檢查文檔是否存在於我的數據庫中。CouchRest - 檢查文檔ID是否存在
我試過db.get(id)
,但是在我的應用程序中拋出了一個404,看起來有點愚蠢,不得不試着繞過它。
有沒有簡單的方法來說「如果這個ID存在 - >更新,否則 - >創建」?
我可能只是在明顯的doco中錯過了它,但我無法弄清楚如何使用CouchRest檢查文檔是否存在於我的數據庫中。CouchRest - 檢查文檔ID是否存在
我試過db.get(id)
,但是在我的應用程序中拋出了一個404,看起來有點愚蠢,不得不試着繞過它。
有沒有簡單的方法來說「如果這個ID存在 - >更新,否則 - >創建」?
快速回答 - 沒有。
基本上,不可能在沙發上保存或更新,因爲更新現有文檔需要修訂版本號,您需要首先查看它。你需要在這裏處理404。
爲了更有幫助,我可能會使用的方法是這樣的:
def save_or_create(db, doc)
begin
rev = db.get(doc['_id'])
doc['_rev'] = rev
db.save_doc(doc)
rescue RestClient::ResourceNotFound => nfe
db.save_doc(doc)
end
end
未經檢驗的,但應該接近。
根據以往的堆垛評論完全工作的功能(我添加[ '_rev']查詢):
def save_or_create(db, doc)
begin
rev = db.get(doc['_id'])['_rev']
doc['_rev'] = rev
db.save_doc(doc)
rescue RestClient::ResourceNotFound => nfe
db.save_doc(doc)
end
end
我建議使用CouchDB的update API(> = 0.10)時,你的問題是關於創造 - 或 - 更新。設計它就像這樣:
POST然後$DB/_design/$DESIGN_NAME/_update/in_place
或投入$DB/_design/$DESIGN_NAME/_update/in_place/$DOC_ID
。這是一個使用裸機RestClient的簡單案例,CouchRest就是在這種情況下構建的。