如何使大型MongoDB请求更快

时间:2019-03-26 09:20:34

标签: mongodb express mongoose

我正在构建一个Express API,该API通过Mongoose查询MongoDB中的大量数据。该数据库存储在MongoDB的Atlas中。当我的查询结果超过10.000个文档时,查询开始变得相当缓慢。如在15-20秒内。在某个时候,数据将增长到> 100.000个文档,并且想象性能将开始成为问题。我的查询对我来说似乎很简单:

if (req.query.start_date && req.query.end_date) {
    query.date = {
        $gte: req.query.start_date,
        $lte: req.query.end_date,
    }
}

const line_items = await MyCollection.find(query);
res.json({line_items: line_items});

注意:我假设我的集合中的_id字段已建立索引?

请注意,数据每10分钟添加一次,因此缓存似乎不是可行的选择。

我该如何加快查询速度?单个查询中有多少数据被认为过多?

1 个答案:

答案 0 :(得分:0)

如果使用猫鼬ORM,则可以使用 lean()方法来处理mongodb中的大量数据。

如猫鼬文档所述,从带有lean选项为true的查询返回的文档是纯JavaScript对象,而不是猫鼬文档。他们没有应用保存方法,吸气剂/设置器或其他猫鼬魔法。因此,通过这种方式,在精简的情况下就不会存在附加到猫鼬文档上的开销,并且我们可以获得高性能。

MyCollection.find({'dob': {'$lte': +new Date()}},
        {},
        {limit:100, skip:0}
    ).lean().exec(function (err, data){
     console.log(data);
  }
);

谢谢。