在以下命令中,foos
是一个集合,我“upsert”一个新项目:
foos.update(criteria,
{ $set: fooUpdate },
{ w: 1, upsert: true },
function(err, upsertedFoo) {
/* upsertedFoo is actually just count of updated/ inserted rows */
}
我想获取刚创建的新文档(如果是更新),或者修改的现有文档(如果已更新)。如果无法做到这一点,那么_id
就足够了。
我怎么能得到这个?
注意:我使用的是标准mongodb
包。
答案 0 :(得分:0)
update
函数的回调将为您提供更新的文档。例如:
foo.update(conditions, document, options, function(err, result) {
if (err)
throw new Error(err);
console.dir(result);
}
答案 1 :(得分:0)
如果将findAndModify与new:true
一起使用,您将获得更新或新对象的结果,它适用于upsert。
http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/#return-new-document
答案 2 :(得分:0)
我在docs上找到了这个:
// Simple findAndModify command performing an upsert and returning the new document
// executing the command safely
collection.findAndModify({d:1}, [['b', 1]],
{d:1, f:1}, {new:true, upsert:true, w:1}, function(err, doc) {
assert.equal(null, err);
assert.equal(1, doc.d);
assert.equal(1, doc.f);
db.close();
})
这个'新'选项似乎是关键:
新 {布尔值,默认值:false}
如果要返回修改后的对象而不是原始对象,请将设置为true。忽略删除。
希望这有帮助