有没有办法在upsert之后获取记录_id?
我看过这篇文章(How to insert a doc into mongodb using mongoose and get the generated id?),但这只是针对插入,而不是更新。
另外,使用MongoDB你可以使用getlasterror(https://groups.google.com/forum/?fromgroups=#!topic/mongoose-orm/ehZ11QY-OUw)来获取_id,但是Mongoose不提供对它的访问(https://groups.google.com/forum/?fromgroups=#!topic/mongoose-orm/pSv6WrasvWg)
由于
答案 0 :(得分:10)
在选项对象中使用Mongoose的findOneAndUpdate方法和upsert: true
。
var query = { name: 'borne' },
data = { name: 'jason borne' },
options = { upsert: true };
Model.findOneAndUpdate(query, data, options, function (err, object) {
/* use object._id */
});
答案 1 :(得分:0)
有希望的另一种可能性:
Model.findOneAndUpdate(query, data, options, function (err, object) {
})).then((result) => {
/* return result.upserted[0]._id */
})
...其中result
如下:
{ n: 1,
nModified: 0,
upserted: [ { index: 0, _id: /* some id */ } ],
ok: 1 }
答案 2 :(得分:0)
如果您希望返回更新的文档,并且在它不存在并且已更新新文档的情况下。以下是您需要设置的选项。
set new: true 选项:options = { upsert: true, new: true };
来源:根据 Jamiel 的评论,我将他的评论添加为答案,因为当没有文档存在且由 upsert 创建时,我很难找到该 _id(我试图创建自己的扩展方法) .