2010-12-22 124 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就是在这种情况下构建的。