この質問について:Mongoidを使用して、「update_all」を使用して、一度に複数のエントリの配列フィールドに値をプッシュできますか?
私は質問したい:
{:multi => true}
ここの目的は何ですか?update_all
今モンゴイド経由で値を配列にプッシュすることは可能ですか?質問は2010年だからです。
ありがとう。
この質問について:Mongoidを使用して、「update_all」を使用して、一度に複数のエントリの配列フィールドに値をプッシュできますか?
私は質問したい:
{:multi => true}
ここの目的は何ですか?update_all
今モンゴイド経由で値を配列にプッシュすることは可能ですか?質問は2010年だからです。ありがとう。
MongoDB更新メソッドのドキュメントには、次のように記載されています。
multi -1つだけではなく、基準に一致するすべてのドキュメントを更新する必要があるかどうかを示します。以下の$演算子を使用すると便利です。
つまり、基本的にmulti
パラメータは、update_all
リンクした質問の動作を可能にするものです。
2番目の質問への回答:はい-Mongoidにはこの機能が組み込まれています。ドキュメントリファレンスはこちらです。ただし、次のように使用できます。
User.where(:gender => "Male").update_all(:title => "Mr")
アップデート
値を配列フィールドにプッシュする場合でも、Mongoidupdate_all
メソッドは$set
データベース更新メソッド(配列全体の更新には使用できますが、使用できない)をサポートしているため、MongoDBライブラリを直接使用する必要があります。それに値をプッシュします)。
あなたがリンクした質問への回答の例はうまくいくでしょう、私はこの質問に出くわした人々の下にそれをコピーしました(シンガラに感謝します!):
User.collection.update(
{'$in' => {:gender => 'Male'}},
{'$push' => {:titles => 'Mr'}},
{:multi => true}
)
特定のユースケースは、Mongodbがシャーディングされる場合です(http://docs.mongodb.org/master/MongoDB-sharding-guide.pdf)。特に、シャーディングされたmongoコレクションの更新時に、_id以外の識別子を使用すると、更新が失敗しました。multiをtrueに設定する必要があり、その後、さまざまなシャードのすべてのドキュメントが更新されました。