10

現在5246個のドキュメントを持つmongodbコレクションに新しいフィールド(列)を挿入する必要があります。フィールドは自動インクリメントする必要があります。そのため、 for ループを使用します。私のクエリは次のとおりです `

for(i=1;i<=5246;i++) {
    db.coll.update({},{$set:{"new_field":i}},false,true)
}; 

しかし、私の悪い出力は次のとおりです。

{new_field:5246},{new_field:5246},{new_field:5246},.......

クエリに問題はありますか..?

4

1 に答える 1

20

検索基準なしですべてのレコードを更新するのはなぜですか?技術的には、このループは正常に機能しています。代わりに行う必要があるのは、次のようにコレクションのカーソルをループすることです。

var cursor = db.coll.find(),
    i = 0;

cursor.forEach(function(x){
    db.coll.update({_id: x._id}, {$set:{new_field:i}})
    $i++;
});

そのようなものが代わりに機能します。

于 2012-10-18T09:02:47.830 に答える