mongodb使用forEach更新所有文档的密钥

时间:2016-11-01 09:25:55

标签: mongodb loops foreach

我想更新Mongo'订单'我所有文件的字段都是1..2..3..4 .... 34。

运行完毕后,他们都有"命令":" 34"。 我做错了什么?

var i = 1;
db.images.find().forEach(function() {
db.images.update(
        {},
        { "$set": {"order": NumberInt(i)} },
        { multi: true }
    );
    i++;
})

1 个答案:

答案 0 :(得分:3)

multi : true表示将更新与查询匹配的所有文档。您的查询是{},它匹配所有文档。所以,基本上你是在每次迭代中更新所有文档的order

此外,必须在游标上启用snapshot模式,以确保不会多次返回同一文档。

你可以试试这个:

var i = 1;
db.images.find().snapshot().forEach(function(image) {
    db.images.update(
        {"_id" : image._id},
        { "$set": {"order": NumberInt(i)} }
    );
    i++;
})

从性能角度来看,最好使用批量API。 bulkwrite