首页 > 解决方案 > 如何使大型 MongoDB 请求更快

问题描述

我正在构建一个快速 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 分钟添加一次,因此缓存似乎不是一个可行的选择。

我可以做些什么来加快我的查询速度?在单个查询中,有多少数据被认为过多?

标签: mongodbexpressmongoose

解决方案


如果您使用的是 mongoose ORM,那么您可以使用lea()方法来处理来自 mongodb 的大量数据。

如 mongoose 文档所述,从带有精简选项 true 的查询返回的文档是纯 javascript 对象,而不是 Mongoose 文档。他们没有应用保存方法、getter/setter 或其他 Mongoose 魔法。因此,通过这种方式,附加到 mongoose 文档的开销在精益的情况下不存在,并且我们获得了高性能。

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

谢谢。


推荐阅读