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)