gpt4 book ai didi

node.js - MongoDB Cursor - 计数和枚举文档的有效方法(在 Node 中)

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:23 25 4
gpt4 key购买 nike

我想知道在迭代游标之前,MongoDB 游标将处理多少文档。我是否必须运行查询两次,或者我可以确定游标的大小,然后迭代游标而不运行查询两次吗?

myCount = myCollection.find({complex query}).count(); // will get my count
myCursor = myCollection.find({complex query}); // will get my cursor for iteration

但这两个命令将运行查询两次,这可能效率很低?

确定要迭代的文档数量而不运行查询两次的最有效方法是什么?我的文档非常大。

在开始通过游标返回文档之前,MongoDB 是否“知道”将返回多少文档?我在哪里可以阅读有关 Mongo 内部结构的信息?

我在 Node 内运行它,并且使用标准 MongoDB Node 驱动程序。因此,解决方案需要处理通常的 Node 回调机制等。

谢谢

编辑

我修改了原来的问题以说明我正在使用 Node 驱动程序

编辑2

yogesh的答案是正确的,我只需要弄清楚node的语法即可。我在下面展示了工作代码,以防它对任何人有帮助

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
});
}

最佳答案

检查cursor.next这将查找db.collection.find()方法返回的游标中的下一个文档。所以你的情况应该写成(在 mongo shell 上测试)

var collectionData  = myCollection.find({complex query})
collectionData.count() // return matching documents count
collectionData.next() // return next documents

或者您也检查mongo hasnext 如果 db.collection.find() 查询返回的游标可以进一步迭代以返回更多文档,则返回 true。

关于node.js - MongoDB Cursor - 计数和枚举文档的有效方法(在 Node 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30530253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com