0

有没有办法更新批量记录。我正在尝试使用以下代码更新用户对象:

.update($doc("_id" $in (usersIds: _*)), users, GetLastError(), false , true)

在上面的代码中,我通过了usersList。在用户列表中,我还添加了新属性并更改现有属性状态,但是使用此语句,记录不会更新

如果我使用以下代码:

.update($doc("_id" $in (usersIds: _*)), $set("inviteStatus" $eq "Invited"), GetLastError(), false , true)

记录更新成功。

4

1 回答 1

0

根据我对API的阅读以及该领域的其他 答案,我认为您正在寻找的那种批量更新不可能通过该update方法进行。

但是,您可以做的是发出原始命令(信用:this answer),如果您有足够的耐心编写所有$set表达式,那么它肯定会起作用,并且比执行save()操作的客户端循环更有效 -通过一个:

注意:编译,但未经测试:

import reactivemongo.api.DB
import reactivemongo.bson._
import reactivemongo.core.commands.RawCommand

class BulkUpdater(db:DB) {

  def bulkUpdateUsers(users:List[User]) = {

    def singleUpdate(u:User) = BSONDocument (
      ("q" -> BSONDocument("_id" -> u._id)),
      ("u" -> BSONDocument("$set" -> BSONDocument(
        "firstName" -> u.firstName, 
        "secondName" -> u.secondName) // etc
    )))

  val commandBson = BSONDocument(
    "update" -> "users",
    "updates" -> BSONArray(users.map(singleUpdate)),
    "ordered" -> false,
    "writeConcern" -> BSONDocument( "w" -> "majority", "wtimeout" -> 5000)
  )

  db.command(RawCommand(commandBson))
}
于 2015-05-22T05:01:18.710 回答