原子更新多个文档并返回它们

Dan*_*nce 8 atomic mongoose mongodb

在 中MongoDB,我正在寻找一种方法来原子地更新多个文档并在一次调用中返回所有更新的文档。

我们可以在 中执行以下所有操作MongoDB

  • 原子更新一个文档并返回更新后的文档:findAndModify或者findOneAndUpdate
  • 原子更新多个文档:update(...{multi: true}updateMany
  • 查询并返回多个文档:find

我不喜欢一种方法来更新多个文档并在一次调用中将它们全部返回。有办法吗?我用作Mongoose查询包。

ser*_*iuz 4

\n

原子更新多个文档:update(...{multi: true}或\n updateMany

\n
\n\n

毫无疑问这是错误的:

\n\n
\n

在 MongoDB 中,写入操作(例如 db.collection.update()、db.collection.findAndModify()、db.collection.remove())在 单个文档级别上是原子的

\n
\n\n
\n\n
\n

在 MongoDB 中,写入操作在单个文档级别上是原子 ,即使该操作修改单个文档中的多个嵌入文档也是如此

\n
\n\n

但是,您可以通过“使用两阶段提交方法”模拟事务以原子方式更新多个文档,此处有详细描述。

\n\n

您还可以查看该$isolated运算符,它“防止影响多个文档的写入操作在第一个文档写入后屈服于其他读取或写入”, 但它“不提供 \xe2\x80\x9call-or-nothing\xe2 \x80\x9d 写入操作的原子性”

\n\n

总之,在 mongodb 级别(也不在驱动程序)上不可能,但您可以在应用程序级别模拟它,因此返回您需要的内容。

\n