【发布时间】:2017-09-15 08:27:16
【问题描述】:
请确认这是我可以在 couchDB 中更新文档的唯一方法;
为了更新一个文档(我们称之为 fooDoc),我需要传递“_rev”。所以首先我需要通过以下代码(foo.get)获取该文档,然后在回调中当我有“_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);
})
});
更新:
感谢努诺的帮助:所以我关注了this documentation;但是似乎更新处理程序的 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)
});
非常感谢您在这方面的帮助
最终更新: 哦,我发现了问题;来自这里enter link description here 的更新处理程序不正确;正确的更新处理程序是:
{
"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];}"
}
【问题讨论】:
标签: javascript node.js couchdb nosql