Javascript CouchDB更新文档

Javascript CouchDB更新文档,javascript,node.js,couchdb,nosql,Javascript,Node.js,Couchdb,Nosql,请确认这是我在couchDB中更新文档的唯一方法 为了更新文档(我们称之为fooDoc),我需要传递“\u rev”。因此,首先我需要通过以下代码(foo.get)获取该文档,然后在回调中,当我有“\u rev”时,我可以使用foo.insert在上一次修订时更新该文档: var foo = nano.db.use('foo'); foo.get('fooDoc', function (err, body) { console.log("get:", err, body); fo

请确认这是我在couchDB中更新文档的唯一方法

为了更新文档(我们称之为fooDoc),我需要传递“\u rev”。因此,首先我需要通过以下代码(foo.get)获取该文档,然后在回调中,当我有“\u rev”时,我可以使用foo.insert在上一次修订时更新该文档:

var foo = nano.db.use('foo');
foo.get('fooDoc', function (err, body) {
    console.log("get:", err, body);
    foo.insert({"_id": "fooDoc", "_rev": body['_rev'], "name": "newName", "bar": "baz"}, function (err, body) {
        console.log("insert:", err, body);
    })
}))

更新:

感谢努诺的帮助:所以我跟着你;但是,更新处理程序的json格式似乎不是有效的json,因此我更新为以下json:

{
    "updates": {
        "inplace": "function(doc, req) {var field = req.form.field;var value = req.form.value;var message = 'set '+field+' to '+value;doc[field] = value;return [doc, message];}"
    }
}
现在,当我运行以下代码时,它不会更新,下面是日志:

错误:空响应:将未定义设置为未定义

守则:

foo.atomic("update", "inplace", "bar6",
        {crazy: true}, function (error, response) {
    console.log("error:", error, "respose:", response)
});
我非常感谢你在这方面的帮助

最终更新: 哦,我解决了问题;此处的更新处理程序不正确;正确的更新处理程序应该是:

{
   "inplace": "function (doc, req) {var message;var body=JSON.parse(req.body);for (id in body) {doc[id] =body[id];message += 'set ', id, 'to', body[id];}return[doc,message];}"
}

在之前不知道版本号的情况下更新文档的唯一方法是通过。 在nano中,使用
db.atomic
调用更新函数

但您不一定需要获取整个文档,只需获取_rev

正如Mike所说,要获得单个文档的修订版,您可以发出HEAD请求。修订版将位于ETag标题中。在nano中使用
db.head


您还可以通过查询一次获取多个文档的_rev。在nano use
db.list

中,您还可以执行
HEAD
请求,通过header中返回的Etag获取修订ID。与获取整个文档相比,网络流量略小


但是,使用此模式确实消除了使用修订ID的安全网,以避免覆盖您阅读文档后对文档所做的修改。

谢谢!我用的是nano;我在Nano中没有看到这样的东西,有吗?更新函数(又称文档更新处理程序)是在设计文档中定义的服务器端函数。Nano应该有调用更新函数的能力,但是你需要一个;另外,您能解释一下db.atomic中的设计名称是什么意思吗?根据文档“使用输入中指定的文档调用设计的更新函数”。这是否意味着我需要在某个地方定义此更新函数?我如何以及在哪里可以定义它?对不起,我对CouchDB太陌生了。我真的很感谢你的帮助,因为你对沙发还不熟悉,我建议你读一下这本书好吗?具体来说,这一点。TLDR:更新函数以称为设计文档的特殊文档的形式存在于数据库中。InNano designname是您的设计文档/功能的名称。噢,感谢您的链接;它有助于理解逻辑;我可以再问你一个简单的问题吗?似乎npmjs.com/package/…中提到的updatehandler函数不是有效的json格式,因此我对其进行了修改,使其成为有效的json(请参阅我更新的原始问题),并运行了与我刚刚更新的原始问题相同的代码;但它没有更新;我真的很感激你的帮助;我刚刚更新了我原来的问题