为couchdb更新nodejs的nano模块中的文档字段



假设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并更新文档。

我知道,这可能不是我发明的,但重要的是要有这段代码。祝你好运

最新更新