Mongoose:upsert后获取doc _id

tez616oj  于 2023-10-19  发布在  Go
关注(0)|答案(4)|浏览(112)

有什么方法可以在upsert之后获取record _id吗?
我看过这篇文章(How to insert a doc into mongodb using mongoose and get the generated id?),但这篇文章只针对插入,而不是更新。
此外,使用MongoDB,您可以使用getlasthorror(https://groups.google.com/forum/?fromgroups=#!topic/mongoose-tags/ehZ 11 QY-OUw),但Mongoose不提供对它的访问(https://groups.google.com/forum/?fromgroups=#!topic/mongoose-wg/pSv6WrasvWg)
谢谢

olmpazwi

olmpazwi1#

使用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 */
});
fafcakar

fafcakar2#

如果您希望返回更新的文档,并且在它不存在并被更新的情况下,则返回新文档。下面是您需要设置的选项。
将new:true设置为选项:options = { upsert: true, new: true };
来源:基于Jamiel的评论,我添加了他的评论作为答案,因为当没有文档存在并由upsert创建时,我很难找到那个_id(我试图创建自己的扩展方法)。

pobjuy32

pobjuy323#

另一种可能的承诺:

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 }
qyzbxkaa

qyzbxkaa4#

const updateUser = await userModel.findByIdAndUpdate(
    { _id: uid },
    {
        name: name
        time: createdAt,
    }
).session(session);

let shallowCopy = {...updateUser}._doc;
console.log("shallowCopy", shallowCopy);

有时我们需要删除一些参数,如id。>._doc将获取更新/插入的数据,您可以使用js delete操作符删除id

delete shallowCopy.id;

相关问题