gpt4 book ai didi

node.js - MongoDB nodejs 驱动程序返回的行数不超过 100000 行

转载 作者:可可西里 更新时间:2023-11-01 09:56:29 24 4
gpt4 key购买 nike

这是复制我的问题的示例:

我用这样的 100 万个文档填充我的集合:

for(i=1; i<=1000000; i++){
if(i%3===0)
db.numbers.insert({_id:i, stuff:"Some data", signUpDate: new Date()});
else
db.numbers.insert({_id:i, stuff:"Some data"});
}

因此,每 3 个文档都有一个 signUpDate

我创建了以下索引:

db.numbers.ensureIndex({"signUpDate" : 1});

然后,我有以下使用 nodejs 的非常小的应用程序:

var Db = require('mongodb').Db
, Connection = require('mongodb').Connection
, Server = require('mongodb').Server
, format = require('util').format;

var host = 'localhost';
var port = Connection.DEFAULT_PORT;

console.log("Connecting to " + host + ":" + port);

Db.connect(format("mongodb://%s:%s/test?w=1", host, port), function(err, db) {
var collection = db.collection('numbers');

collection.find({'signedUp': true}, {'_id':1}).limit(100000).toArray(function(err, docs){
console.log(docs.length)
});
});

这很好用。

但是,如果我删除 .limit(100000),服务器将停在那里并且从不响应。

简而言之,我要做的就是返回一个 _id 列表,其中 signUpDate 不为空(应该有333,000左右)

我很确定问题出在 mongodb 缓存的方式上,但我不确定如何解决这个问题?

最佳答案

您不应该像这样对大型结果集调用 toArray。相反,要么:

使用 each 迭代结果:

collection.find({'signedUp': true}, {'_id':1}).each(function(err, doc){
if (doc) {
console.log(doc);
} else {
console.log('All done!');
}
});

stream结果:

var stream = collection.find({'signedUp': true}, {'_id':1}).stream();
stream.on('data', function(doc) {
console.log(doc);
});
stream.on('close', function() {
console.log('All done!');
});

关于node.js - MongoDB nodejs 驱动程序返回的行数不超过 100000 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725354/

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