我想扫描整个mongo集合并计算custom聚合。我正在使用Node和mongoose。为了扫描整个表,我使用了MyModel.find({}, callback);
当我运行代码时,我发现mongoose执行查询并在数组中收集所需的记录,然后简单地将整个数组传递给回调函数。现在,在完整的集合扫描中,它需要大量的时间。
有没有可能我得到了一个游标对象,我可以通过它不断地迭代,将所需的记录映射到某个回调函数,而不是等待在数组中收集一大堆数据。(这是我观察到的,如果我错了,请纠正)。
另外,有没有人可以建议一下,对自定义聚合进行全集扫描是不是正确的方式,或者我应该看看map-reduce或其他类似的选择。
发布于 2013-02-14 13:02:30
您的第一个选择应该是使用aggregate方法而不是find来执行您希望执行的任何聚合操作。如果这还不能满足您的需求,请查看mapReduce,就像您提到的那样。
但是,如果您发现确实需要迭代大型集合,则应该使用Mongoose对查询结果的streaming支持,而不是将其放入一个大型数组中。
var stream = MyModel.find().stream();
stream.on('data', function (doc) {
// do something with the mongoose document
}).on('error', function (err) {
// handle the error
}).on('close', function () {
// the stream is closed
});https://stackoverflow.com/questions/14867697
复制相似问题