2012-04-11 5 views

答えて

3

MongoDB update method状態のドキュメントは:

マルチ - 条件に一致するすべての文書が一つだけではなく、更新されるべきかどうかを示します。以下の$演算子で便利に使うことができます。

したがって、基本的にmultiパラメータは、リンク先の質問でupdate_allの動作を有効にするものです。

あなたの2番目の質問に答えて:はい - モンゴイドにはこの機能が組み込まれています。ドキュメントの参照はhereです。しかし、あなたはこのようにそれを使用することができます:

User.where(:gender => "Male").update_all(:title => "Mr") 

更新あなたは配列フィールドに値をプッシュしたい場合には

、あなたがまだあるため、直接のMongoDBライブラリを使用する必要がありますMongoid update_allメソッドは、$set(配列全体を更新するために使用できますが、値をプッシュしないでください)のデータベース更新メソッドのみをサポートしています。

たとえば、あなたがうまくいくためにリンクの質問への答えに、私はこの質問(感謝shingara!)に遭遇する人の下にそれをコピーした:

User.collection.update( 
    {'$in' => {:gender => 'Male'}}, 
    {'$push' => {:titles => 'Mr'}}, 
    {:multi => true} 
) 
+0

おかげ@theTRONは、質問2のために:あなたは、プレーンフィールドを更新するために示した、配列のフィールドに値をプッシュするためにそれを使用することも可能ですか? – larryzhao

+0

Mongoidのドキュメントでは、フィールドの値を設定する '$ set'メソッドを使用すると言います。だからあなたはMongoDBライブラリにアクセスする必要があります - 私はこれを反映するために私の答えを更新しました。 – theTRON

+0

ありがとう、その手段はまだこの方法を使用しています。 :) – larryzhao

0

のMongoDBがあるときに、特定のユースケースがありますシャード(http://docs.mongodb.org/master/MongoDB-sharding-guide.pdf)。シャードされたmongoコレクションの更新に関して、特に_id以外の識別子を使用した場合、更新は失敗しました。私はマルチをtrueに設定しなければならず、その後、さまざまなシャード間のすべてのドキュメントを更新しました。

関連する問題