javascript - 为什么这个 MongoDB 循环执行的次数比预期多?

标签 javascript mongodb

我有这个服务器端 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/

相关文章:

node.js - node-mongodb-native:同一副本集的多个数据库连接?

javascript - 为什么 0 没有从列表中删除?

javascript - javascript 字符串转义引号

javascript - 如何在注销操作中隐藏网站中的消息按钮?

mongodb - 是否可以从查询中返回特定值的列表?

node.js - 将数据传递到 Express 中的 View

node.js - MongoDB Nodejs 驱动程序 - 关于引号的规则/指南是什么?

javascript - polymer : "Prev"或 "Next"按钮不循环浏览页面

javascript - Ionic 应用程序和服务器帖子 : Acces-Control-Allow-Origin

MongoDB:在多个数据库上运行聚合