MongoDB聚合查询

在MongoDB中我们可以通过aggregate()函数来完成一些聚合查询,aggregate()函数主要用于处理诸如统计,平均值,求和等,并返回计算后的数据结果

语法:

db.collection.aggregate([
    {
        $group:{
            id:{"$分组键名","$分组键名","$分组键名"....}
            别名:{聚合运算:"$运算列"}
        }  
    },
    {
        条件筛选:{键名:{运算条件:运算值}}
    }
])


常见的Mongo聚合操作和mysql的查询做对比

MongoDB聚合查询


1、$sum求和

1)查询test集合中 一共有多少个文档

相当于sql语句 select count(*) as count form test

db.test.aggregate([    
    {
        $group:{
        _id:null, //null表示不作任何分组
        count:{$sum:1}  
        }
    }
])

MongoDB聚合查询


2)查询test集合中所有size键中值的总和

相当于sql语句:select count(size) as totalSize from test

db.test.aggregate([
    {        
        $group:{
            _id:null,
            count:{$sum:"$size"} //$size表示文档中size的值        
        }    
    }
])

MongoDB聚合查询


3)对test集合中的每一个title进行分组,并计算每组size的总和

相当于sql语句 select title as _id,sum(size) as totalSize from test group by title

db.test.aggregate([
    {        
        $group:{
            _id:"$title",
            count:{$sum:"$size"} //$size表示文档中size的值        
        }    
    }
])

MongoDB聚合查询


2、条件筛选 $match

1)查询test集合中有多少文档的size大于300

相当于sql语句:select count(*) from dev where size > 300

db.test.aggregate([    
    {$match: {size:{$gt:300}}},
    {$group:{_id:null,totalCount:{$sum:1}}}
])

MongoDB聚合查询


2)查询test集合,根据title分组计算出每组size的总和,并过滤掉小于等于200的文档

相当于sql语句:select title as _id,sum(size) as totalSize group by title having totalSize > 200

MongoDB聚合查询


3)最大值 $max

查询dev集合中size最大的文档

MongoDB聚合查询


4)$min 最小值

查询dev集合中size最小的文档

MongoDB聚合查询


5)$avg 平均值

查询dev集合中size平均值

MongoDB聚合查询


6)$push 统计结果返回数组

查询dev集合,按照size分组并返回title,如果size相同则使用数组返回他们的title

MongoDB聚合查询


7)$unwind 对数组字段进行拆分

MongoDB聚合查询


8)管道操作

什么是管道操作:

管道在Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理

管道操作符:$match,$group,$sort $limit $skip $unwind



9)$project 聚合投影约束

查询test集合,将数组中的内容拆分显示,并且只显示title和tags键

MongoDB聚合查询


查询test集合,将数组中的内容拆分显示,要求只显示title键和tags键,并将title键改为Title

MongoDB聚合查询


①、$project 字符串处理

在$project中我们可以通过MongoDB的字符串操作符对投影的内容做字符串处理

查询test集合,将数组中的内容拆分显示,将title中的值转换为小写并命名为New_Title,

将tags的值转换为大写并命名为NEW_Tags

MongoDB聚合查询


查询test集合,将数组中的内容拆分显示。将title和tags字段的值拼接成一个完整的字符串

并在Title_Tags字段中显示

MongoDB聚合查询


查询test集合,将数组中的内容拆分显示。只显示title字段的前三个字符,并命名为Title_Prefix

MongoDB聚合查询


②、$project - 算数运算

在$project中我们可以通过MongoDB的算数运算符对投影的内容做运算处理

查询test集合中的数据,显示title和size字段,为size字段做+1操作,并显示为New_Size

MongoDB聚合查询

查询test集合中的数据,显示title和size字段,为size字段做-1操作,并显示为New_Size

MongoDB聚合查询


③、$project - 日期处理

MongoDB中的日期处理

插入当前时间:db.test.insert({date:new Date()})

MongoDB中的时间会比系统时间少8个小时。因为他的时间是UTC时间,而中国的时间是东八区,比UTC快8个小时,所以会比当前时间少8个小时

MongoDB聚合查询


插入指定日期

db.test.insert({title:new Date("2018-05-01T14:20:23Z")})

db.test.insert({title:ISODate("2019-06-01T14:20:23Z")})


查询时间

db.test.find({time:{$eq:ISODate("2021-07-08T13:01:27.535Z")}})


处理年、月、日

向test集合中插入一个文档 {name:"admin",birth:new Date("1995-05-01T13:30:00Z")}

MongoDB聚合查询

MongoDB聚合查询


显示小时、分钟、秒、毫秒

MongoDB聚合查询


显示星期、全年的第几周、全年的第几天

MongoDB聚合查询


自定义日期格式

MongoDB聚合查询

MongoDB聚合查询

上一篇:MySQL常用数据类型


下一篇:sql server 表去除重复行