主页 > 新闻资讯 > 大数据培训:MongoDB Shell的聚合操作

大数据培训:MongoDB Shell的聚合操作

作者:张老师 浏览次数: 2021-04-06 17:31
通过Shell来进行MongoDB的数据管理操作,尤其是在大规模、比较复杂的数据查询处理需求场景下,是非常高效的一种方式。在MongoDB Shell当中,聚合操作尤其是一种常见的操作。今天的大数据培训分享,我们就来讲讲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当中的使用频率还是很高的,熟练掌握聚合操作,对于提升效率还是很有好处的。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,零基础班本月正在招生中,课程大纲及学习视频,可联系客服获取!
热点排行
推荐文章
立即申请>>