Mongodb 使用匹配和排序优化mongo聚合
我有一个聚合管道正在变得非常缓慢。假设我的文档看起来像:Mongodb 使用匹配和排序优化mongo聚合,mongodb,sorting,filter,aggregation-framework,Mongodb,Sorting,Filter,Aggregation Framework,我有一个聚合管道正在变得非常缓慢。假设我的文档看起来像: { value1, value2, } 并在这两个字段上建立索引 我的管道是: collection.aggregate([ { $match: { value1: someVar }, }, { $sort: { value2: 1 }, }, { $limit: 5, }, ], cb); 问题是有相当多的文档匹配(~10k),而在管道的第二步,我正在失去索引优势。有没有一种
{
value1,
value2,
}
并在这两个字段上建立索引
我的管道是:
collection.aggregate([
{
$match: { value1: someVar },
},
{
$sort: { value2: 1 },
},
{
$limit: 5,
},
], cb);
问题是有相当多的文档匹配(~10k),而在管道的第二步,我正在失去索引优势。有没有一种好方法可以改进这一点,即利用索引进行匹配和排序?您的索引是如何定义的?您是否为
value1
和value2
分别设置了单个索引?是:集合。确保索引({value1:1,value2:1})
该索引不支持仅按value2排序,它是一个复合索引,您将同时使用这两个索引。您是对的。我的错。我将其更改为collection.ensureIndex({value1:1,value2:1});集合.ensureIndex({value2:1})
这应该更好吗?@Euclides最初的$match
阶段,然后是$sort
实际上需要原始的复合索引。当前编写的聚合查询相当于:db.collection.find({value1:someVar}).sort({value2:1}).limit(5)
。