1

MongoDBのデータを反復処理する最速の方法を見つけようとしています。コレクションに60kのドキュメントがあり、値がである各ドキュメントにremoveすべてを入れたいと思います。(MySQLから転送)。1つのフィールドを削除するだけの私のテスト関数は次のとおりです。 fieldsNULL

  db.collection.find({cc_type:null}).forEach(function(u) {
            db.collection.update(u, {$unset:{"cc_name":1} 
            //some other null-value fields to check
}); 

また、データを確認するのに約20秒かかります。私は何が間違っているのですか?また、PHP用のMongoDBドライバーを使用しています。MongoDBインストゥルメントを使用する代わりに、PHPでデータを反復処理する方が効率的ではないでしょうか。大量のデータを反復処理してデータにいくつかの変更を加えるためのベストプラクティスは何ですか(存在するフィールドに応じてドキュメントごとに異なる変更)?

4

1 に答える 1

1

1回の操作で実行する方が高速updateです。シェルでは次のようになります。

db.collection.update({cc_type:null}, {$unset: {cc_name: 1}}, false, true)

trueパラメータはフラグであるため、最初のmultiドキュメントだけでなく、すべてのドキュメントに影響します。

于 2013-02-23T02:02:24.923 に答える