注:"counter"为自定义名称,用来存储结果的变量
2.2、Group by null:将集合中所有文档分为一组
例2:求学生总人数、平均年龄
db.stu.aggregate([
{$group:
{
_id: null ,
counter:{$sum: 1 },
avgAge:{$avg: ‘$age‘ }
}
}
])
2.3、透视数据
例3:统计学生性别及学生姓名
db.stu.aggregate([
{$group:
{
_id: ‘$gender‘ ,
name:{$push: ‘$name‘ }
}
}
])
使用$$ROOT可以将文档内容加入到结果集的数组中,代码如下
db.stu.aggregate([
{$group:
{
_id: ‘$gender‘ ,
name:{$push: ‘$$ROOT‘ }
}
}
])
三、$match
用于过滤数据,只输出符合条件的文档
使用MongoDB的标准查询操作
例1:查询年龄大于20的学生
db.stu.aggregate([
{$match:{age:{$gt: 20 }}}
])
例2:查询年龄小于20的男生、女生人数
db.stu.aggregate([
{$match:{age:{$lt: 20 }}},
{$group:{_id: ‘$gender‘,counter:{$sum:1 }}}
])
四、$project
修改输入文档的结构,如重命名、增加、删除字段、创建计算结果(类似查找中投影,值为1表示显示,值为0不显示)
例1:查询学生的姓名、年龄
db.stu.aggregate([
{$project:{_id: 0,name:1,age:1 }}
])
例2:查询男生、女生人数,输出人数
db.stu.aggregate([
{$group:{_id: ‘$gender‘,counter:{$sum:1 }}},
{$project:{_id: 0,counter:1 }}
])
五、$sort
将输入文档排序后输出
例1:查询学生信息,按年龄升序
db.stu.aggregate([{$sort:{age:1}}])
例2:查询男生、女生人数,按人数降序
db.stu.aggregate([
{$group:{_id: ‘$gender‘,counter:{$sum:1 }}},
{$sort:{counter: -1 }}
])
六、$limit、$skip
6.1、$limit
限制聚合管道返回的文档数
例1:查询2条学生信息
db.stu.aggregate([{$limit:2}])
6.2、$skip
跳过指定数量的文档,并返回余下的文档
例2:查询从第3条开始的学生信息
db.stu.aggregate([{$skip:2}])
例3:统计男生、女生人数,按人数升序,取第二条数据
db.stu.aggregate([
{$group:{_id: ‘$gender‘,counter:{$sum:1 }}},
{$sort:{counter: 1 }},
{$skip: 1 },
{$limit: 1 }
])
注意顺序:先写skip,再写limit
七、$unwind
将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
语法1:对某字段值进行拆分
db.集合名称.aggregate([{$unwind:‘$字段名称‘}])
构造数据
db.t2.insert({_id:1,item:‘t-shirt‘,size:[‘S‘,‘M‘,‘L‘]})
查询
db.t2.aggregate([{$unwind:‘$size‘}])
语法2:对某字段值进行拆分
处理空数组、非数组、无字段、null情况
db.inventory.aggregate([{
$unwind:{
path: ‘$字段名称‘ ,
preserveNullAndEmptyArrays: < boolean > #防止数据丢失
}
}])
构造数据
db.t3.insert([
{ "_id" : 1, "item" : "a", "size": [ "S", "M", "L" ] },
{ "_id" : 2, "item" : "b", "size" : [ ] },
{ "_id" : 3, "item" : "c", "size": "M" },
{ "_id" : 4, "item" : "d" },
{ "_id" : 5, "item" : "e", "size" : null }
])
使用语法1查询
db.t3.aggregate([{$unwind:‘$size‘}])
查看查询结果,发现对于空数组、无字段、null的文档,都被丢弃了
问:如何能不丢弃呢?
答:使用语法2查询
db.t3.aggregate([{$unwind:{path:‘$sizes‘,preserveNullAndEmptyArrays: true }}])
————————————————
版权声明:本文为CSDN博主「Jeremy_Lee123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lixinkuan328/article/details/104267165
MongoDB之聚合aggregate操作
标签:修改 mit 最大值 mongod 第一个 aggregate 处理 查询 linux
查看更多关于MongoDB之聚合aggregate操作的详细内容...