mongodb findOneAndUpdate()未返回“已更新”的文档

bt1cpqcv  于 2022-12-12  发布在  Go
关注(0)|答案(4)|浏览(154)

遵循官方的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 }选项,但它没有返回更新的文档。

为什么会这样?

jm2pwxwz

jm2pwxwz1#

若要退回,您需要添加

{returnOriginal: false}

始终检查 NodeJS MongoDB API

e5nqia27

e5nqia272#

要使mongoose返回新文档,您需要添加{ new:true }到查询。
我会给予这个作为镜头:

usersCollection.findOneAndUpdate(
   { _id : new ObjectID (this.data._id) },
   { $set: { total : this.data.updatedTotal } },
   { new: true }
)
t3irkdon

t3irkdon3#

节点mongodb驱动程序:不建议使用returnOriginal,请改用带“before”或“after”的returnDocument

{returnDocument: 'after'}
l7wslrjt

l7wslrjt4#

我解决了。

由于我使用的是本机mongodb驱动程序,

我们将使用{returnOriginal: false}而不是{new: true}

相关问题