运行此查询时:
const project = await models.Projects
.updateOne(
{ _id: projectId },
{
$addToSet:
{
membersIds:
{
$each: membersIds
},
},
},
);
我得到的答复是:
{ n: 1, nModified: 1, ok: 1 }
是否可以获取更新的对象而不是此猫鼬数据?
答案 0 :(得分:2)
注意!
我看到了回复,没问题,但是,请注意添加 new 选项并将其设置为true查询以获取新的更新文档,否则它将在更新之前返回文档:
models.Projects.findByIdAndUpdate(
{ "_id": projectId },
{ $addToSet:{ membersIds: { $each: membersIds }}})
.exec()
.then((response) => {
console.log('document before updating =>', response);
});
models.Projects.findByIdAndUpdate(
{ "_id": projectId },
{ $addToSet:{ membersIds: { $each: membersIds }}},
{new: true})
.exec()
.then((response) => {
console.log('document after updating =>', response);
});
答案 1 :(得分:1)
使用 findByIdAndUpdate
获取更新的文档。因此,从您的代码中,只需更改为:
const project = await models.Projects.findByIdAndUpdate(
{_id: projectId},
{
$addToSet:
{
membersIds:
{
$each: membersIds
},
},
},
{new: true}
)
不要忘记添加一个选项 {new: true}
,它将更新的文档返回到您的项目变量。
答案 2 :(得分:0)
从docs:[callback] «Function» params are (error, writeOpResult)
开始,这意味着无法使用updateOne
方法返回文档。
但是可以使用提供updateOne
选项的findByIdAndUpdate来代替lean: true
答案 3 :(得分:0)
如果更新操作后将不使用文档,则应使用 updateOne ,它更快。然而;如果需要更新的文档,则应使用findByIdAndUpdate或findOneAndUpdate。您可以仅使用带有 findByIdAndUpdate 的_id进行过滤,但是可以使用带有 findOneAndUpdate 的每个现有字段过滤器。