首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CouchRest -检查文档id是否存在

CouchRest -检查文档id是否存在
EN

Stack Overflow用户
提问于 2010-12-22 10:43:24
回答 3查看 1.4K关注 0票数 2

我可能只是在显而易见的文档中遗漏了它,但是我不知道如何使用CouchRest检查我的数据库中是否存在文档。

我尝试过db.get(id),但它在我的应用程序中抛出了一个404,而且必须尝试/抓住它的方法似乎有点傻。

有没有一种简单的方式来说“如果这个ID存在->更新,否则就创建->”?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-22 11:06:47

快速回答-不是。

基本上,在couch中保存或更新是不可能的,因为更新现有文档需要修订号,并且您需要先获取修订号才能查看。您需要在这里处理404。

为了更有帮助,我可能会使用这样的方法:

代码语言:javascript
复制
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

未经测试,但应该很接近。

票数 2
EN

Stack Overflow用户

发布于 2012-03-19 04:12:48

当您的问题与创建或更新有关时,我建议使用couchdb update API (>=0.10)。就像这样设计它:

代码语言:javascript
复制
{
  "updates" : {
    "in_place" : "function(doc, req) {
      var new_doc = null;
      if (req.body) {
        new_doc = JSON.parse(req.body);
      } else {
        return [null, 'No doc given!'];
      }
      if (doc) {
        for(var attr in new_doc) {
          if (attr != '_id' && attr != '_rev') {
            doc[attr] = new_doc[attr];
          }
        }
        return [doc, 'Update OK'];
      } else {
        new_doc['_id'] = new_doc['_id'] || req.uuid;
        return [new_doc, 'Insert OK'];
      }
    }"
  }
}

然后发布到$DB/_design/$DESIGN_NAME/_update/in_place或PUT到$DB/_design/$DESIGN_NAME/_update/in_place/$DOC_ID。这是一个使用裸机RestClient的简单案例,CouchRest就是在这个基础上构建的。

票数 2
EN

Stack Overflow用户

发布于 2011-01-22 15:03:55

基于之前的stacker注释的完整工作函数(我在查询中添加了'_rev‘):

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4505743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档