【发布时间】:2015-05-29 12:57:32
【问题描述】:
我想知道在迭代游标之前,我的 MongoDB 游标将处理多少文档。我是否必须运行两次查询,还是可以确定游标的大小,然后在游标上迭代而不运行两次查询?
myCount = myCollection.find({complex query}).count(); // will get my count
myCursor = myCollection.find({complex query}); // will get my cursor for iteration
但是这两个命令会运行两次查询,估计效率不高吧?
在不运行两次查询的情况下确定要迭代的文档数量的最有效方法是什么?我的文档很大。
在开始通过游标返回文档之前,MongoDB 是否“知道”将返回多少个文档?我在哪里可以阅读有关 Mongo 内部结构的信息?
我在节点中运行它,并且使用标准的 MongoDB 节点驱动程序。因此,解决方案需要处理通常的节点回调机制等。
谢谢
编辑
我已经修改了原来的问题,说明我正在使用节点驱动程序
EDIT2
yogesh 的回答是正确的,我只需要弄清楚 node.js 的语法。我已经在下面展示了工作代码,以防它帮助任何人
db.collection('collectionName', function(err, collection) {
function processItem(err, item) {
if (item === null) {
db.close();
callback(null, {info: "yippee"});
return;
}
cursor.nextObject(processItem); // continue looping
}
var cursor = collection.find({foo:1});
cursor.count(function(err,count){
console.log('resultCursor size='+count);
cursor.nextObject(processItem); // Start of the loop
});
}
【问题讨论】: