Node.js 猫鼬:上传后获取文档id

Node.js 猫鼬:上传后获取文档id,node.js,mongoose,Node.js,Mongoose,有没有办法在插入后获取记录id 我看过这篇文章(),但它只面向插入,而不是更新 另外,使用MongoDB,您可以使用getlasterror()获取_id,但Mongoose不提供对它的访问() 谢谢在选项对象中使用Mongoose的方法 var query = { name: 'borne' }, data = { name: 'jason borne' }, options = { upsert: true }; Model.findOneAndUpdate(query, d

有没有办法在插入后获取记录id

我看过这篇文章(),但它只面向插入,而不是更新

另外,使用MongoDB,您可以使用getlasterror()获取_id,但Mongoose不提供对它的访问()

谢谢

在选项对象中使用Mongoose的方法

var query = { name: 'borne' },
    data = { name: 'jason borne' },
    options = { upsert: true };
Model.findOneAndUpdate(query, data, options, function (err, object) {
    /* use object._id */
});

承诺的另一种可能性:

Model.findOneAndUpdate(query, data, options, function (err, object) {
})).then((result) => {
    /* return result.upserted[0]._id */
})
…其中,
结果
如下所示:

{ n: 1,
  nModified: 0,
  upserted: [ { index: 0, _id: /* some id */ } ],
  ok: 1 }

如果您希望返回更新后的文档,并且在该文档不存在且已升级的情况下,返回新文档。下面是您需要设置的选项

将new:true设置为选项:
options={upsert:true,new:true}

来源:根据Jamiel的评论,我添加了他的评论作为答案,因为在upsert创建的文档不存在的情况下,我很难找到该id(我正在尝试创建自己的扩展方法)。

请注意,如果您希望返回更新的文档,如果它不存在并且在新文档中被追加,那么您需要将new:true添加到options:options={upsert:true,new:true};