我有这个服务器端 JS 脚本:
// Run processNames on all rows in cities
var cur = db.cities.find();
cur.immortal = true;
var j = 0;
var total = cur.count();
cur.forEach(function(obj) {
processNames(obj);
if (j % 100000 === 0) {
print(j + "/" + total + " cities processed");
}
j++;
});
print("Completed load: " + j + " cities processed");
在输出中,我看到这个:
...
4800000/3411205 cities processed
4900000/3411205 cities processed
5000000/3411205 cities processed
5100000/3411205 cities processed
5200000/3411205 cities processed
5300000/3411205 cities processed
5400000/3411205 cities processed
5500000/3411205 cities processed
怎么会发生这种事?游标仅返回 3411205 个文档,但 forEach 循环执行了超过 500 万次。这是怎么回事?
最佳答案
我认为您修改了 processNames()
方法中的文档,这会导致 MongoDB 重新定位文档。您可以使用snapshot()来克服这个问题。
var cur = db.cities.find().snapshot();
关于javascript - 为什么这个 MongoDB 循环执行的次数比预期多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356296/