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

ただし、できることは、生のコマンドを発行することです(クレジット:この回答)。これは、すべての式を記述するのに十分な忍耐力があれば、間違いなく機能し、操作を 1 つ実行するクライアント側のループよりも効率的です。一つ:$setsave()

注意: コンパイルされますが、テストされていません:

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 に答える