如何使用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; }); } });