Mongo 聚合框架优化-Aggregate(四)

四 管道优化

1、管道序列优化

 1)$match操作符应该尽量出现在管道的前面
  $match操作符出现在管道的前面时,可以提早过滤文档,加快聚合速度。而且其只有出现在管道的最前面,才可以使用索引来加快查询。
 2)管道序列
  应该尽量在管道的开始阶段(执行”$project”、”$group”或者”$unwind”操作之前)就将尽可能多的文档和字段过滤掉
 3)$sort +$match
  当$sort后面跟着$match操作符时,执行聚合时优化器会将$match管道操作符放在$sort之前,以减少排序的对象数量。

{ $sort: { age : -1 } },{ $match: { status: 'A' } }

  优化后

{ $match: { status: 'A' } },{ $sort: { age : -1 } }

4)$skip + $limit
当$skip后面跟着$limit操作符时,$limit操作符会移动到$skip之前,并且会把$skip的值加在$limit的值上。
{ $skip: 10 },{ $limit: 5 }优化后{ $limit: 15 },{ $skip: 10 }
5)$redact + $match
当$redact后面跟着$match操作符时,聚合操作有时候会把部分$match的匹配条件加到$redact之前,这样可以利用索引查询文档并缩小进入管道文档的数量。

{ $redact: { $cond: { if: { $eq: [ "$level", 5 ] }, then: "$$PRUNE", else: "$$DESCEND" } } },
        { $match: { year: 2014, category: { $ne: "Z" } } }

  优化后

{ $match: { year: 2014 } },
        { $redact: { $cond: { if: { $eq: [ "$level", 5 ] }, then: "$$PRUNE", else: "$$DESCEND" } } },
        { $match: { year: 2014, category: { $ne: "Z" } } }

6)$project + $skip or $project + $limit
当$project后面跟着$skip或者$limit操作符时,会将其移到$project之前

{ $sort: { age : -1 } },
{ $project: { status: 1, name: 1 } },
{ $limit: 5 }

  优化后

{ $sort: { age : -1 } },
{ $limit:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值