猫鼬:upsert后获取doc _id

时间:2012-11-04 03:03:30

标签: node.js mongoose

有没有办法在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

由于

3 个答案:

答案 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(我试图创建自己的扩展方法) .