2010-12-22 128 views
2

我可能只是在明顯的doco中錯過了它,但我無法弄清楚如何使用CouchRest檢查文檔是否存在於我的數據庫中。CouchRest - 檢查文檔ID是否存在

我試過db.get(id),但是在我的應用程序中拋出了一個404,看起來有點愚蠢,不得不試着繞過它。

有沒有簡單的方法來說「如果這個ID存在 - >更新,否則 - >創建」?

回答

2

快速回答 - 沒有。

基本上,不可能在沙發上保存或更新,因爲更新現有文檔需要修訂版本號,您需要首先查看它。你需要在這裏處理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 

未經檢驗的,但應該接近。

0

根據以往的堆垛評論完全工作的功能(我添加[ '_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 
2

我建議使用CouchDB的update API(> = 0.10)時,你的問題是關於創造 - 或 - 更新。設計它就像這樣:

POST然後$DB/_design/$DESIGN_NAME/_update/in_place或投入$DB/_design/$DESIGN_NAME/_update/in_place/$DOC_ID。這是一個使用裸機RestClient的簡單案例,CouchRest就是在這種情況下構建的。