2017-04-06 11 views
2

updateManyメソッドで現在のインデックスまたはドキュメント番号またはカーソルIDを使用できる方法はありますか?例えばNode.js mongodb updateMany with

:ここ

db.collection("users").updateMany({}, { $set: {"uname": "user_" + $index}});

$インデックスは、ドキュメントの現在の数やインデックスまたはシリアルを意味します。私はMongoDB Node.JS Driver 2.2

答えて

1

を使用しています

は、操作のこの種を実行するためのupdateMany方法と方法はありません。しかし、効率的な解決策は、findbulkWriteを組み合わせて使用​​することです。

(関数発生器及び収率を用いて)例:

var coll = db.collection("users"); 
var Users = yield coll.find().toArray(); 
var bulkArray = []; 
Users.forEach(function* (d, i) { 
    bulkArray.push({ updateOne: { filter: { _id: mongodb.ObjectID(d._id) }, 
     update: { $set: { uname: 'user_' + i }}, upsert:true }); 
}); 
yield coll.bulkWrite(bulkArray, {ordered:true, w:1});