首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过sails查询整个集合(sails-mongo或mongodb-native)

无法通过sails查询整个集合(sails-mongo或mongodb-native)
EN

Stack Overflow用户
提问于 2014-10-24 22:58:41
回答 1查看 908关注 0票数 1

在一个mongo数据库中,我有大约400万个文档(每个文档由一个时间戳和一个值组成)。

我有一个需要能够通过rest api查询所有文档的用例。我在控制器中使用sails-mongo或直接使用node-mongodb-native对sailsjs进行了几个测试,但这两个解决方案都不起作用,进程挂起,再也不会返回。

第一个案例:来自mongo shell

代码语言:javascript
复制
var v= db.data.find()
v.length() => returns 4280183 in something like 30 sec

在mongodb.log中,我可以看到所有的'getmore‘行和返回的项目数

第二种情况:从我的sails控制器(使用node-mongodb-native)

代码语言:javascript
复制
// TEST WITH MONGODB NATIVE
native_find: function(req, res){
    var MongoClient = require('mongodb').MongoClient;
    var url = 'mongodb://localhost:27017/jupiter';
    MongoClient.connect(url, function(err, db) {
        console.log("Connected correctly to server");

        var collection = db.collection('data');

        // Find all data
        collection.find({}).toArray(function(err, d) {
          db.close();
          res.json(d);
        });
      });
    }

该过程被触发,mongo似乎可以工作,但过了一段时间后,我出现了以下错误:

代码语言:javascript
复制
$ curl 'http://192.168.1.143:8000/native_find'
curl: (52) Empty reply from server

如果我检查mongo日志,我可以看到一些getmore,但不足以查询整个集合。

第三种情况:从sails控制器到sails-mongo ORM

代码语言:javascript
复制
// TEST WITH SAILS-MONGO
sailsmongo_find: function(req, res){
    Data.find().exec(function(err, d){
       return res.json(d);
    });
}

似乎一旦从mongo中检索到结果,就会对整个结果(4.000.000次...)进行几次循环(在rewriteID中映射并调用toJSON方法)。耗费了大量的时间,导致这个过程永远挂起。

你知道如何让node / mongo对这些海量数据进行查询吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-27 08:02:35

这是一个单一操作中要检索的大量数据,尝试以异步方式,在批处理过程中获取数据。

也许你可以将结果限制在100.000或200.000,然后将它们保存到一个数组中,然后你可以要求更多的结果。

您可以使用async来实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26550604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档