如何使用Cloudant Node.js更新Cloudant中的文档

所以,我所做的事情应该非常简单,也许是这样,我只是在做错事。 我想更新我的数据库中的现有文件,但我有一些问题,有人可以请指教?

Nano的文档声明如下插入:

db.insert(doc, [params], [callback]) 

所以我应该可以做到以下几点:

  var user = { 'firstname' : 'my', 'secondname' : 'name' }; db.insert(user, {_rev: '2-cc5825485a9b2f66d79b8a849e162g2f'}, function(err, body) {}); 

然而,每当我尝试这个,它创build一个全新的文件。 如果我这样做,那么它确实会更新我的文档,当然,除了_rev:

 db.insert({_rev: '2-cc5825485a9b2f66d79b8a849e162g2f'}, function(err, body) {}); 

所以问题是,我怎么传递我的对象,并得到它来更新,而不是创build一个新的logging?

 var user = { 'firstname' : 'my', 'secondname' : 'name', '_id': <id from prev object>, '_rev': <rev from prev object> }; db.insert(user, function(err, body) {}); 

_id和_rev都是必需的,才能使更新工作。 他们应该在你发送的对象也。

db.insert(...)命令中的第一个参数是要创build/更新的文档。 如果你传递了一个带有._rev属性的文档,那么它将用作为你的db.insert(...)的第一个参数传入的doc的Cloudant中相同的_revreplace文档。 如果文档不包含._rev属性,那么Cloudant将创build一个全新的文档。

这就解释了你在两种场景中遇到的行为。 为了对文档进行更新,请确保在使用db.insert(...)函数的第一个参数时,将._id._rev属性连同其余的文档属性一起包含._id

得到它了! 这是解决scheme:

 db.get('user', { revs_info: true }, function(err, doc) { if (!err) { console.log(doc); doc.firstname = 'my'; doc.secondname = 'name'; db.insert(doc, doc.id, function(err, doc) { if(err) { console.log('Error inserting data\n'+err); return 500; } return 200; }); } });