【网易云课堂】MongoDB聚合

MongoDB的产生背景是在大数据的环境下,所谓的聚合就是统计操作

1、获取集合个数

count()函数

> db.student.count()
9

模糊查询

> db.student.count({"name":/zhan/i})
9

2、消除重复数据

传统的sql数据库使用distinct,在MongoDB中依然支持

本次操作没有直接的函数支持,只能通过runCommand()指令

> db.runCommand({"distinct":"student","key":"name"})
{
        "values" : [
                "zhansan-1",
                "zhansan-2",
                "zhansan-3",
                "zhansan-4",
                "zhansan-5",
                "zhansan-6",
                "zhansan-7",
                "zhansan-8",
                "zhansan-9"
        ],
        "ok" : 1
}

进过官方查看,发现有函数支持

上面可以用下面的代替

3、聚合框架

aggregate()函数

3-1、$group

在MongoDB中会将集合依据指定的key的不同进行分组操作,并且每一个组都会产生一个处理的文档结果

_id是分组条件,如果_id设置为null,就是将整个文档作为一个整体组,不分组统计

数组显示$push

数组去重$addToSet

注意,所有的分组都是无序的

3-2、$project

可以控制数据列的显示规则,可以执行的规则如下

1、普通列({"成员":1|true})表示要显示的内容 2、_id列({"_id": 0|false})表示“_id”列是否显示 3、条件过滤列({"成员":表达式})满足表达式之后的数据可以进行显示

只显示name列,只有被设置进去的列才被显示出来,_id默认显示

起始就是数据库的投影机制,在这个机制中也支持四则运算:加法($add)、减法($substract)、乘法($multiply)、除法($dividi)、求摸($mod

除了四则运算还支持

关系运算符:大小比较($cmp)、等于($eq)、不等于($ne)、大于($gt)、判断null($ifNull)这些返回值都是boolean类型 逻辑运算符:与($and)、或($or)、非($not) 字符串操作:连接($concat)、截取($substr)、转小写($toLower)、转大写($toUpper)、不区分大小写比较($strcasecmp)

显示name不显示_id,判断score是否大于等于90

3-3、$sort

3-4、分页处理

$limit和$skip

要先夸再取

3-5、$unwind

在查询数据时,经常会返回数组信息,但是数组并不是方便信息的浏览,所以提供有"$unwind",将数组信息转换为字符串

3-6、$geoNear

计算距离,必须要有索引的支持

3-7、$out

将查询结果输出到指定的集合里面(表的复制操作,生成一张新表)

Last updated

Was this helpful?