Javascript 在mongo和node中的大集合上迭代光标不会';你不能返回所有结果吗?

Javascript 在mongo和node中的大集合上迭代光标不会';你不能返回所有结果吗?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个收藏,有500k个文档(收集大约需要 130mb) 我使用的是标准mongodb驱动程序: var mongodb = require('mongodb'); 我试图使用游标在node.js中遍历这个集合。(因为.toArray将整个数据集放入内存所需时间太长) 我发现它只做了1000次,所以我查看了文档,在“每个”部分下,它说要增加批量大小 所以我做了一个非常大的批量,我没有找到一种方法使它无限大。如果你知道一个方法,让我知道 var cursor = db.collection('

我有一个收藏,有500k个文档(收集大约需要 130mb)

我使用的是标准mongodb驱动程序:

var mongodb = require('mongodb');
我试图使用游标在node.js中遍历这个集合。(因为.toArray将整个数据集放入内存所需时间太长)

我发现它只做了1000次,所以我查看了文档,在“每个”部分下,它说要增加批量大小

所以我做了一个非常大的批量,我没有找到一种方法使它无限大。如果你知道一个方法,让我知道

var cursor = db.collection('test').find({}).batchSize(1000000000000);
cursor.each(function(err, doc) {
    // only does this 30382 times
});
再增加批处理大小也不会使它迭代更多的元素,而不是30382


如何使
游标。each()
迭代500000次?

您可以跟踪索引,如果出现错误,您可以再次从离开的位置继续:

const iterateCollection = (skip) => {
 const cursor = db.collection('test').find({}).skip(skip);
   cursor.each(function(err, doc) {
   skip++;
   if(err){
     //if err due to overflow
     iterateCollection (skip)
   }
 });
};

iterateCollection(0);

我用“forEach”而不是“each”解决了这个问题。。。我不知道区别是什么,我所知道的是,到目前为止它是有效的。所以

var cursor = db.collection('test').find();

cursor.forEach(function(doc) {
   // do stuff, does it 500,000 times for my collection...

}, function(err) {
    // finished
  db.close();
});
现在唯一的问题是forEach的速度很慢,就像一月份的糖蜜一样,所以我们有兴趣听听其他的解决方案

var cursor = db.collection('test').find();

cursor.forEach(function(doc) {
   // do stuff, does it 500,000 times for my collection...

}, function(err) {
    // finished
  db.close();
});