CouchRest - 检查文档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就是在这种情况下构建的。