【问题标题】:In ReactiveMongo 0.18.8, how can I perform an update of several documents, with different values, in a single command?在 ReactiveMongo 0.18.8 中,如何在单个命令中更新多个具有不同值的文档?
【发布时间】:2020-10-08 16:10:49
【问题描述】:
我在 SO 中挖掘时发现了 this answer。
基本上,这正是我所需要的。但是,在我当前的 ReactiveMongo 版本(0.18.8)中,db.command(RawCommand(commandDoc)) 似乎不再可能。 DB下没有“命令”。我似乎找不到这个命令移动到哪里了。
谁能帮帮我?或者告诉我我还能如何实现我需要的东西?
我正在尝试在单个 DB 命令中执行多个具有不同值的文档的多个更新。
谢谢!
【问题讨论】:
标签:
mongodb
scala
reactivemongo
【解决方案1】:
在documentation 中,您可以看到插入、更新或删除的批量操作示例。
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import reactivemongo.api.bson.BSONDocument
import reactivemongo.api.bson.collection.BSONCollection
def updateWithBulk(personColl: BSONCollection) = {
// Bulk update: multiple update
val updateBuilder1 = personColl.update(ordered = true)
val updates = Future.sequence(Seq(
updateBuilder1.element(
q = BSONDocument("firstName" -> "Jane", "lastName" -> "Doh"),
u = BSONDocument("age" -> 18),
upsert = true,
multi = false),
updateBuilder1.element(
q = BSONDocument("firstName" -> "Bob"),
u = BSONDocument("age" -> 19),
upsert = false,
multi = true)))
updates.flatMap { ops => updateBuilder1.many(ops) }
}
另请注意,版本 0.18.8 大约有一年的历史,最新版本是主要版本 1.0.0。