CouchDB清除了有关插入的文件



我正在将nano与couchdb一起使用,我只是想对文档进行简单的更新以添加新字段。例如,假设我有一个名为foo的文档。目前唯一的字段是" bar",具有一定的价值。然后,我尝试使用我将在最后发布的代码进行db.intert,但现在没有两个字段,而是删除了bar,而是我只有我的新字段。我该如何解决?

我正在使用的代码:

    dB.get('foo', function(err, body) {
        if (!err){
            if(typeof body.qwax === 'undefined'){
                dB.insert({qwax : [data], "_rev" : body._rev}, 'foo', function(err, body, header) {
                    if (err) {
                        console.log(err.message);
                        return;
                    }
                });
            }
            else{
                body.qwax.push(data);
                dB.insert({qwax : body.qwax, "_rev" : body._rev}, 'foo', function(err, body, header) {
                  if (err) {
                    console.log(err.message);
                    return;
                  }
                });
            }
        }
        else{console.log(err);}
    });

在其他地方定义数据的地方。

在纳米中有一个原子函数,您可以调用特定的更新功能,为设计文档:https://github.com/dscape/nano#dbatomicdesignname-updatename-docname-body-callback

这是文档中提到的用法示例:https://github.com/dscape/nano/blob/master/tests/design/atomic.js

例如,您可以创建此更新属性属于_foo设计文档:

updates: {
        setBar: function (doc, req) {
          var body = JSON.parse(req.body);
          doc.bar = body.bar;
          return [doc, 'OK'];
        }

然后,您将使用纳米调用此SETBAR更新功能:

db.atomic('_foo', 'setBar', your_foo_document_id, { bar: barvalue }, function (err, headers) {
    if (err) {
      return callback(err);
    }
    ... rest of your code

对于每个更新,您需要提供整个文档,而不仅仅是要添加到文档的字段。因此,您需要获取文档的当前版本,将文件添加到其中,然后进行数据库更新。

dB.insert({qwax : [data], "_rev" : body._rev, "bar" : body.bar}, 'foo', function(err, body, header) {
                if (err) {
                    console.log(err.message);
                    return;
                }
            });

您可以在设计文档中使用更新处理程序(Wiki)。您只需编写一个JS函数,而不是再次发送整个文档,而是调用此功能,它可以使更新为"适当"。

该函数将获得两个参数:要更新的文档和客户提供的一些数据,并且它将在HTTP标题中返回更新文档的新版本。

最新更新