遵循官方的manual,
db.students2.findOneAndUpdate(
{ _id : 1 },
[ { $set: { "total" : { $sum: "$grades.grade" } } } ], // The $set stage is an alias for ``$addFields`` stage
{ returnNewDocument: true }
)
我的实现,
const usersCollection = db().collection("users"); // db() is exposed via a module
usersCollection.findOneAndUpdate(
{ _id : new ObjectID (this.data._id)},
{ $set: {
total : this.data.updatedTotal
}
} ,
{ returnNewDocument: true }
)
尽管有{ returnNewDocument: true }
选项,它仍返回旧文档
但是,当我再次查询集合时,
usersCollection.findOne({_id: new ObjectID()}); // returns the updated document
它返回更新后的文档,这意味着db.collection.findOneAndUpdate()
起作用了。
问题是,尽管有{ returnNewDocument: true }
选项,但它没有返回更新的文档。
为什么会这样?
4条答案
按热度按时间jm2pwxwz1#
若要退回,您需要添加
始终检查 NodeJS MongoDB API
e5nqia272#
要使mongoose返回新文档,您需要添加{ new:true }到查询。
我会给予这个作为镜头:
t3irkdon3#
节点mongodb驱动程序:不建议使用
returnOriginal
,请改用带“before”或“after”的returnDocument
。l7wslrjt4#
我解决了。
由于我使用的是本机mongodb驱动程序,
我们将使用
{returnOriginal: false}
而不是{new: true}
。