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标头中返回更新文档的新版本。