我正在构建一个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分钟添加一次,因此缓存似乎不是可行的选择。
我该如何加快查询速度?单个查询中有多少数据被认为过多?
答案 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);
}
);
谢谢。