9

Meteorから始めて、Mongoのサポートが必要です。リストに表示している名前のコレクションがあり、他の基準に基づいてデータベース内の特定のエントリの1つの変数を更新できるようにしたいと考えています。基本的に私がやりたいことは次のとおりです。

特性A=trueおよびB=trueであるすべてのエントリについて、特性Cをfalseに変更します。

これまで、Mongoがコレクションの要素に対する「foreach」ループをどのように処理できるかを理解しようとしてきました。各要素について、条件AとBが成立するかどうかを確認してから、collection.update(element、{C :false})。これは、私が思っていたよりもはるかに問題があることが証明されています。私はこのようなことをしたい(ダミーの変数名を使用して):

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

私はこの基本コードを変更してきましたが、Mongoでのインデックス作成/コレクションの動作に関する基本的な何かが欠けていると感じ始めています。このようなコレクションにインデックスを付けることはできますか(もしそうなら、これは私がやろうとしていることを行うための最も便利な方法ですらありますか?)

4

2 に答える 2

14

もちろん、投稿した直後にこれを行う方法を理解しています。もちろん、Meteorのドキュメントで提案されています。

そしてもちろん、それは簡単な解決策です。

collection.update({A: true, B: true}, {$set: {C:false}});
于 2012-12-24T01:40:24.840 に答える
9

コメントですでに示唆されているように、正解は次のとおりです。

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

(少なくとも純粋なMongoDBでは、そこを参照してください)。

これがないmulti: trueと、基準に一致する1つのドキュメントのみが変更されます。

Meteorでは、一致させる以外にクライアント側の更新を行うことは許可されていないため、少し注意が必要です(したがって、さまざまな基準の可能性はなく、可能性もありません) 。http://docs.meteor.com/#multiを参照してください。更新します。

すべての検索を繰り返すことができますが、そのようなコードをサーバー側で実行することをお勧めします。

于 2014-10-17T07:09:58.220 に答える