2012-12-24 17 views
9

私は流星で始まり、Mongoの助けが必要です。私はリストに表示している名前のコレクションを持っていて、他の基準に基づいてデータベースの特定のエントリの1つの変数を更新できるようにしたい。基本的には、次のようにします。Meteor/Mongo:コレクション内の特定の要素を見つけて更新する

特性A =真でB =真であるすべてのエントリについて、特性Cを偽に変更します。

これまで、私はMongoがコレクションの要素に対して "for each"ループを処理する方法と、条件AとBが保持されているかどうかを確認するために各要素のチェックを試みてきました。そしてcollection.update要素、{C:偽})。これは私が思ったよりもはるかに問題が多いことが分かります。私は、この(ダミー変数名を使用して)のような何かをしたい:

for (i = 0; i < collection.find().count(); i++){ 
    if (collection[i].A===true && collection[i].B===true) 
     collection.update(collection[i], {$set: {C: false}}); 
}; 

私の周りに、この基本コードを変更してきたが、私は、コレクションの中にどのように動作するかのインデックス/についての基本的な何かが欠けていることを検知するために始めていますモンゴこのようなコレクションにインデックスを付けることができますか?もしそうなら、私がやろうとしていることを実行するのに最も便利な方法ですか?

答えて

14

私はもちろん、投稿後にこれを行う方法を理解しています。もちろん、Meteorのドキュメントにも示唆されています!

とは、もちろん、それは簡単なソリューションです:

collection.update({A: true, B: true}, {$set: {C:false}}); 
+2

あなた自身の答えを受け入れることができます:-) – Rahul

+1

これは、セレクタに一致する最初のドキュメントにのみ機能します。あなたは必要です。 collection.update({A:true、B:true}、{$ set:{C:false}}、0,1);すべての行について –

+2

@DavidWihl複数の行を編集するには、0,1の代わりに{multi:true}を3番目のパラメータとして設定する必要があります(meteor docs、http://docs.meteor.com/#updateを参照)。 –

9

すでにコメントで提案されている、正しい答えは次のとおりです(少なくとも、純粋にMongoDB、see there中)

collection.update({A: true, B: true}, {$set: {C:false}}, {multi: true}); 

multi: trueがないと、基準に一致する1つの文書のみが変更されます。

メテオでは、それを照合する以外にクライアント側の更新を行うことはできないため、少し難解です(multiの可能性はありません)。http://docs.meteor.com/#updateを参照してください。

すべての検索を繰り返しますが、このようなコードをサーバー側で実行する方がよいでしょう。

+0

'multi:true'はMeteorでもサポートされています:http://docs.meteor.com/#/full/update –

関連する問題