Yaf*_*sky 3 foreach loops mongodb
我想在Mongo“订单”字段中更新所有文档,因此它们将是1..2..3..4 .... 34。
运行此命令后,它们都具有“ order”:“ 34”。我究竟做错了什么?
var i = 1;
db.images.find().forEach(function() {
db.images.update(
{},
{ "$set": {"order": NumberInt(i)} },
{ multi: true }
);
i++;
})
Run Code Online (Sandbox Code Playgroud)
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++;
})
Run Code Online (Sandbox Code Playgroud)
从性能的角度来看,最好使用批量API。大量写入
| 归档时间: |
|
| 查看次数: |
3383 次 |
| 最近记录: |