nosql--08MongoDB的聚合命令

聚合 aggregate

聚合是基于数据处理的聚合管道,每个文档通过一个有多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组过滤等功能,然后进行一系列处理,输出相应的结果

db.集合名.aggregate({管道:{表达式}})

常用管道

$group分组

  • 按照gender进行分组,获取不同数据的个数和平均年龄
db.stu.aggregate({$group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}})
  • 按照hometown进行分组,获取不同组的平均年龄

db.stu.aggregate({$group:{_id:"$hometown",mean_age:{$avg:"$age"}}})

  • 统计整个文档的年龄
db.stu.aggregate({$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}})

$project改样式

能修改输入和输出的样式

db.stu.aggregate({$group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}},
				{$project:{gender:"$_id",count:1,avg_age:1,id:0}}
)

$match 管道里的find

用于过滤数据,只输出符合条件的数据
使用MongoBD的标准查询操作
区别:match是一个管道命令,能将结果交给后一个管道,但是find不可以

  • 查询年龄大于20的男生女生人数
db.stu.aggregate({$match:{age:{$gt:20}}},
				{$group:{_id:"$gender",count:{$sum:1}}},
				{$project:{_id:0:gender:"$_id",count:1}}
)

$sort 排序

将输入文档排序后输出

  • 查询男生,女生人数,按照人数降序
db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}}
							{$sort:{counter:-1}}
)

$limit $skip

limit返回文档数,skip跳过制定文档数
先skip再limit效率高

$unwind

将文档中某一个数组类型拆分成多条,每条包含数组中的一个值

db.t.insert({_id:1,item:"t-shirt",size:['s','m','l']})
db.t.aggregate({$unwind:"$size"})

$unwind练习

数据库中有一条数据:{“username”:“Alex”,“tag”:[“C#”,“java”,“c++”]}如何获取改tag列表的长度

db.t.aggregate({$match:{username:"Alex"}},{$wind:"$tag"},{$group:{_id:null,sum:{$sum:1}}})

猜你喜欢

转载自blog.csdn.net/qq_34788903/article/details/89373012
今日推荐