MongoDB-聚合操作

对文档的筛选结果进行整理统计

聚合操作

对文档的筛选结果进行整理统计

db.collection.aggregate()
功能 : 完成聚合操作
参数 : 聚合条件 —》 聚合操作符

聚合操作符

$group 分组聚合 需要配合具体的分组统计选项

$sum  : 求和
e.g.
db.class0.aggregate({$group:{_id:'$gender',num:{$sum:1}}})

db.class0.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}})

$avg : 求平均数

e.g.   db.class0.aggregate({$group:{_id:'$gender',avg:{$avg:'$age'}}})

$max  求最大值

e.g.
db.class0.aggregate({$group:{_id:'$gender',max:{$max:'$age'}}})

$min  求最小值

e.g.
db.class0.aggregate({$group:{_id:'$gender',min:{$min:'$age'}}})

$project
修改文档的显示效果

e.g. project值得用法和find函数field格式一致
db.class0.aggregate({$project:{_id:0,name:1,age:1}})

db.class0.aggregate({$project:{_id:0,Name:’$name’,Age:’$age’}})

$match
数据筛选
$match值得用法同query一致

e.g. 过滤年龄大于18岁的数据文档
db.class0.aggregate({$match:{age:{$gt:18}}})

$limit
筛选前几条文档

e.g. 筛选前三条数据文档
db.class0.aggregate({$limit:3})

$skip
跳过几条文档显示

e.g. 跳过前三条文档
db.class0.aggregate({$skip:3})

$sort
将数据排序

e.g. 按照年龄排序
db.class0.aggregate({$sort:{age:1}})

聚合管道

聚合管道指的是将上一个聚合的操作结果给下一个聚合继续操作

db.collection.aggregate([{聚合},{},{}…])

e.g. match –> project –> sort
db.class0.aggregate([{$match:{gender:’m’}},{$project:{_id:0}},{$sort:{age:1}}])

e.g. group —> match 找到重名学生
db.class0.aggregate([{$group:{_id:’$name’,num:{$sum:1}}},{$match:{num:{$gt:1}}}])