Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby CouchRest-检查文档id是否存在_Ruby_Couchdb_Couchrest - Fatal编程技术网

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

Ruby CouchRest-检查文档id是否存在,ruby,couchdb,couchrest,Ruby,Couchdb,Couchrest,我可能只是在doco中遗漏了它,但我不知道如何使用CouchRest检查数据库中是否存在文档 我尝试了db.get(id),但这在我的应用程序中抛出了一个404,而不得不尝试/抓住它似乎有点愚蠢 是否有一种简单的方式来表示“如果此ID存在->更新,否则->创建”快速回答-否 基本上,不可能在coach中保存或更新,因为更新现有文档需要修订号,您需要先获取修订号才能查看。您需要在这里处理404 为了更有帮助,我可能会使用以下方法: def save_or_create(db, doc) beg

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

我尝试了
db.get(id)
,但这在我的应用程序中抛出了一个404,而不得不尝试/抓住它似乎有点愚蠢

是否有一种简单的方式来表示“如果此ID存在->更新,否则->创建”

快速回答-否

基本上,不可能在coach中保存或更新,因为更新现有文档需要修订号,您需要先获取修订号才能查看。您需要在这里处理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

未测试,但应关闭。

基于先前堆垛机注释的功能完全正常(我在查询中添加了[''u rev']:

当您的问题是关于创建或更新时,我建议使用couchdb(>=0.10)。这样设计:

{
  "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/\u design/$design\u NAME/\u update/in\u place
或发布到
$DB/\u design/$design\u NAME/\u update/in\u place/$DOC\u ID
。这是一个使用裸机RestClient的简单案例,CouchRequest就是基于此构建的

{
  "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'];
      }
    }"
  }
}