假设node.js 上有一个通过nano打开的couchdb会话
var dbserv = require('nano')('http://localhost:5984');
在dbserv
可以访问的couchdb服务器上,有一个数据库users
,其中包含具有作为数组的字段groups
的用户。
如果我想在users
中更新用户jim
上的groups
,如何在不替换整个文档的情况下进行更新?
沙发数据库
要创建更新处理程序,请编写一份设计文档:
{
"_id": "_design/yourapp",
"updates": {
"foo": "function(doc, req) {
doc.groups.push(req.query.bar); // or do whatever you like with it
return [doc, 'done'];
}"
}
}
并将其放入id为_design/yourapp
的数据库中,然后像这样获取:
http://localhost:5984/users/_design/yourapp/_update/foo/jim?bar=baz
纳米沙发
var dbserv = require('nano')('http://localhost:5984');
var db = dbserv.use('users');
var designdoc = {/* The above design document */};
db.insert(designdoc);
db.get('_design/yourapp/_update/foo/jim', {bar: 'baz'});
请注意,您只需要插入一次设计文档,甚至可以使用curl
手动插入,然后只需如上所述发出GET请求即可更新文档。
免责声明:未经测试,我以前从未使用过nano,但它应该是你必须做的事情。
找到了一种进行更新的方法,而不需要所有的_design需求等等。Nano CouchDB的问题是,插入并没有真正提供发送更新所需的正确_rev的位置。无论如何,还有一个工作要做。需要做的是从要更新的_id中获取_rev值。因此,您使用Nano db.get作为大函数,获取_rev值并更新文档。这是一个代码示例:
users.get('document_name', function(err, doc) {
updaterev = doc._rev;
users.insert({title:'here_ya_go',_rev:updaterev},'document_name', function(err, body , header) {
if (!err)
{
console.log(body);
res.send('update website succeed');
}
else
{
console.log(err.error);
}
});
});
当db.insert函数在db.get函数中时,它给了我们一个机会来获取_rev并更新文档。
我知道,这可能不是我发明的,但重要的是要有这段代码。祝你好运