【mongoDB查询进阶】聚合管道(四) -- 累加器(Accumulators)
发布时间:2020-12-14 01:09:14 所属栏目:百科 来源:网络整理
导读:回顾 相关文章回顾 mongoDB查询进阶--聚合管道(一)回顾 mongoDB查询进阶--聚合管道(二)回顾 mongoDB查询进阶--聚合管道(三)回顾 管道操作符的分类 管道操作符可以分为三类: 阶段操作符(Stage Operators) 表达式操作符(Expression Operators) 累加器(Ac
回顾相关文章回顾mongoDB查询进阶--聚合管道(一)回顾 管道操作符的分类管道操作符可以分为三类:
参考MongoDB官网:https://docs.mongodb.com/manual/reference/operator/aggregation
累加器(Accumulators)累加器本来只能使用与$groud下,但是版本3.2或以上,部分累加器还能使用于$project。当在$group中使用时,累加器是针对每个分组使用的;当在$project中使用时,累加器则是针对每个字面量起作用。 常用累加器
$sum 求和操作符用法:
{ $sum: <expression> }
{ $sum: <expression> } or { $sum: [ <expression1>,<expression2> ... ] } 说明:
举例:
$avg 求均值操作符用法:
{ $avg: <expression> }
{ $avg: <expression> } or { $avg: [ <expression1>,<expression2> ... ] } 举例:
$first 求第一值操作符用法: { $first: <expression> } 举例: [ { _id: 1,name: 'kate',class: 'a' },{ _id: 2,name: 'jack',{ _id: 3,name: 'kent',class: 'b' },] 操作: db.collection.aggregate( [ { $group: { _id: "$class",firstPersonName: { $first: "$name" } } } ] ) 结果: [ { _id: 'a',firstPersonName: 'kate' },{ _id: 'b',firstPersonName: 'kent' },] $last 求最后值操作符用法: { $last: <expression> } 举例: [ { _id: 1,firstPersonName: { $last: "$name" } } } ] ) 结果: [ { _id: 'a',firstPersonName: 'jack' },] $max 求最大值操作符用法:
{ $max: <expression> }
{ $max: <expression> } or { $max: [ <expression1>,<expression2> ... ] } 举例:
$min 求最小值操作符用法:
{ $min: <expression> }
{ $min: <expression> } or { $min: [ <expression1>,<expression2> ... ] } 举例:
综合示例假设有一个关于成绩的集合 [ { _id: 1,score: 80,class: 'a',subject: 'A' },score: 60,subject: 'B' },score: 90,{ _id: 4,{ _id: 5,name: 'nick',class: 'b',{ _id: 6,{ _id: 7,score: 50,score: 30,] 示例一需求:
操作: 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',minScore: 30,avgScore: 60 },] 示例二需求:
操作: 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 } ]
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |