通过Shell来进行MongoDB的数据管理操作,尤其是在大规模、比较复杂的数据查询处理需求场景下,是非常高效的一种方式。在MongoDB Shell当中,聚合操作尤其是一种常见的操作。今天的大数据培训分享,我们就来讲讲MongoDB Shell的聚合操作。
一、MongoDB聚合查询
Mongodb是一种基于JSON文档的NOSQL数据库,其数据查询语言我们称之为MQL,如:
db.collectionA.find();--相当于select* from connectionA;
db.inventory.find({ status: “A” }, { item: 1, status: 1 } ) --相当于SELECT_id, item, status from inventory WHERE status = "A“
Find命令只适合用于单表查询(包括嵌套文档和数组查询)
Mongo中的复杂查询、多集合连接查询以及数据分析和计算,均需要使用到聚合查询。,格式如下:
db.collection.aggregate([{stage},{stage},……,{stage}]);
其中stage是聚合的一个步骤,每个stage都是一个json文档。
二、MongoDB聚合操作
MongoDB中聚合(aggregate) 操作(db.collection.aggregate())是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
数据库中的操作:
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
$match:过滤出符合status字段等于“A”的Document;
$group:按cust_id字段对Document进行分组,也可以设置为(’_id’:null)
$sum:计算每个唯一cust_id的amount总和。
aggregate语法:
db.collection.aggregate(pipeline, options)
管道命令:$group
按照某个字段进行分组
$group是所有聚合命令中用的最多的一个命令,用来将集合中的文档分组,可用于统计结果
示例如下:
db.stu.aggregate(
{$group:
{
_id:"$gender",
counter:{$sum:1}
}
}
)
其中注意点:
db.db_name.aggregate是语法,所有的管道命令都需要写在其中
_id表示分组的依据,按照哪个字段进行分组,需要使用$gender表示选择这个字段进行分组
$sum:1 表示把每条数据作为1进行统计,统计的是该分组下面数据的条数
管道命令之$match
$match用于进行数据的过滤,是在能够在聚合操作中使用的命令,和find区别在于$match 操作可以把结果交给下一个管道处理,而find不行。
示例如下:
1.查询年龄大于20的学生
db.stu.aggregate(
{$match:{age:{$gt:20}}
)
2.查询年龄大于20的男女学生的人数
db.stu.aggregate(
{$match:{age:{$gt:20}}
{$group:{_id:"$gender",counter:{$sum:1}}}
)
管道命令之$project
$project用于修改文档的输入输出结构,例如重命名,增加,删除字段
示例如下:
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
$sort用于将输入的文档排序后输出
使用示例如下:
1.查询学生信息,按照年龄升序
db.stu.aggregate({$sort:{age:1}})
2.查询男女人数,按照人数降序
db.stu.aggregate(
{$group:{_id:"$gender",counter:{$sum:1}}},
{$sort:{counter:-1}}
)
管道命令之$skip 和 $limit
$limit限制返回数据的条数
$skip 跳过指定的文档数,并返回剩下的文档数
同时使用时先使用skip在使用limit
使用示例如下:
1.查询2条学生信息
db.stu.aggregate(
{$limit:2}
)
2.查询从第三条开始的学生信息
db.stu.aggregate(
{$skip:3}
)
3.统计男女生人数,按照人数升序,返回第二条数据
db.stu.aggregate(
{$group:{_id:"$gender",counter:{$sum:1}}},
{$sort:{counter:-1}},
{$skip:1},
{$limit:1}
)
关于大数据培训,MongoDB Shell的聚合操作,以上就为大家做了大致的讲解了。聚合操作在MongoDB当中的使用频率还是很高的,熟练掌握聚合操作,对于提升效率还是很有好处的。成都加米谷大数据,专业
大数据培训机构,大数据开发、数据分析与挖掘,零基础班本月正在招生中,课程大纲及学习视频,可联系客服获取!