4

有什么方法可以在 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

谢谢

4

3 回答 3

11

在 options 对象中使用 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 */
});
于 2013-01-17T14:17:52.283 回答
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 }
于 2019-05-04T17:48:56.207 回答
0

如果您希望返回更新的文档,并且在它不存在并且被插入新文档的情况下。以下是您需要设置的选项。

设置 new: true 到选项:options = { upsert: true, new: true };

资料来源:根据 Jamiel 的评论,我将他的评论添加为答案,因为当不存在文档并由 upsert 创建时,我很难找到 _id (我试图创建自己的扩展方法)。

于 2021-06-11T15:27:03.300 回答