查阅相关文章查询进阶--聚合管道(三)回顾管道算子的分类管道算子可分为三类:阶段算子(Stage运算符)、表达式运算符(ExpressionOperators)和累加器(Accumulators)。参考MongoDB官网:https://docs.mongodb.com/manual/reference/operator/aggregation本文主要内容是pipelineoperator中的累加器。累加器(Accumulators)累加器只能在$groud中使用,但在3.2或以上版本中,某些累加器也可以在$project中使用。在$group中使用时,累加器用于每个组;在$project中使用时,累加器适用于每个文字。常用累加器运算符简述$sum求和运算符,v3.2+可用于$group或$poject$avg平均值运算符,v3.2+可用于$group或$poject$first为return第一个组的值只能用在$group$last返回组的最后一个值,只能用在$group$max返回组的最大值,v3.2+可以用在$groupor是$poject$min用于返回组的最小值,v3.2+可以用于$groupor$poject$sum求和运算符用法:$project下使用{$sum:}$group:{$sum:}or{$sum:[,...]}解释:列子值结果{$sum:}只包含所有值的和ofnumbers{$sum:}包括数字和非数字的所有数值的总和{$sum:}非数字或不存在的0示例:请看下面的综合示例$avg平均运算符用法:在$group下使用{$avg:}在$project下使用:{$avg:}or{$avg:[,...]}例子:请看下面综合示例$first单值运算符用法:{$first:}例子:假设数据:[{_id:1,name:'kate',class:'a'},{_id:2,name:'jack',class:'a'},{_id:3,name:'kent',class:'b'},]操作:db.collection.aggregate([{$group:{_id:"$class",firstPersonName:{$先t:"$name"}}}])result:[{_id:'a',firstPersonName:'kate'},{_id:'b',firstPersonName:'kent'},]$last最后值运算符用法:{$last:}示例:假设数据:[{_id:1,name:'kate',class:'a'},{_id:2,name:'jack',class:'a'},{_id:3,name:'kent',class:'b'},]操作:db.collection.aggregate([{$group:{_id:"$class",firstPersonName:{$last:"$name"}}}])结果:[{_id:'a',firstPersonName:'jack'},{_id:'b',firstPersonName:'kent'},]$max最大值运算符用法:$group使用{$max:}$projectuse:{$max:}or{$max:[,...]}示例:请看下面的综合示例$min求最小运算符使用:在$group下使用{$min:},在$project下使用:{$min:}or{$min:[,...]}例子:请看下面的综合示例。综合示例假设有一组成绩[{_id:1,name:'kate',score:80,class:'a',subject:'A'},{_id:2,name:'kate',score:60,class:'a',subject:'B'},{_id:3,name:'jack',score:90,class:'a',subject:'A'},{_id:4,name:'jack',score:60,class:'a',subject:'B'},{_id:5,name:'nick',分数:80,class:'b',subject:'A'},{_id:6,name:'nick',分数:90,class:'b',subject:'B'},{_id:7,name:'kent',score:50,class:'b',subject:'A'},{_id:7,name:'kent',score:30,class:'b',subject:'B'},]示例一个需求:获取各科目最高分获取各科目最低分获取各科目平均分操作:db.collection.aggregate([{$group:{_id:"$subject",maxScore:{$max:'$score'},minScore:{$min:'$score'},avgScore:{$avg:'$score'},}}])结果:[{_id:'A',maxScore:90,minScore:50,avgScore:75},{_id:'B',maxScore:90,minScore:30,avgScore:60},]例2需求:获取每个人的总分从高到低排序操作:db.collection.aggregate([{$group:{_id:"$name",totalScore:{$sum:'$score'}}},{$sort:{totalScore:-1}},{$project:{_id:0,name:'$_id',totalScore:1,}}])结果:[{name:'nick',totalScore:170},{name:'jack',totalScore:150},{name:'kate',totalScore:140},{name:'kent',totalScore:80}]感谢阅读~