来自 MongoDB文档:
尽可能早地将 $match 放在聚合管道中。因为 $match 限制了聚合管道中的文档总数,所以早期的 $match 操作可以最大限度地减少管道中的处理量。
如果您在管道的最开始放置 $match,则查询可以像任何其他 db.collection.find() 或 db.collection.findOne() 一样利用索引。
给定查询
db.articles.aggregate( [
{ $match : {date : {$gt: now, $lte: later } } },
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
在哪里(当然),现在和以后代表格式正确的日期,
聚合框架是否将索引用于第二个匹配项(如果可用),还是只有聚合管道中的第一个匹配项才有资格使用索引。
查询是否会更好地执行为:
db.articles.aggregate( [
{ $match : {date : {$gt: now, $lte: later }, score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
假设存在涵盖日期和分数的索引?