CouchDB在插入时清除文档?

我用纳米couchDB,我只是试图做一个简单的更新文件添加一个新的领域。 例如,假设我有一个名为foo的文档。 它现在唯一的领域是“酒吧”,有一定的价值。 然后我尝试用我将在后面发布的代码做db.insert,但是现在不是现在有两个字段,而是删除了,而我只是有我的新字段。 我怎样才能解决这个问题?

我正在使用的代码:

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);} }); 

数据在其他地方被定义。

在nano中有一个primefaces函数,你可以调用一个特定的更新函数在devise文档中: https : //github.com/dscape/nano#dbatomicdesignname-updatename-docname-body-callback

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

例如,您可以为_foodevise文档创build这个更新属性:

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

然后你可以像这样使用nano来调用这个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; } }); 

您可以在devise文档中使用更新处理程序 ( wiki )。 您只需编写一个JS函数,而不是再次发送整个文档,您可以调用此函数,并可以使更新“就地”。

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