zoukankan      html  css  js  c++  java
  • MongoDB聚合查询

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

    语法:

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

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

    image

    1、$sum求和

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

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

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

    clipboard

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

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

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

    clipboard

    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的值        
            }    
        }
    ])

    clipboard

    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}}}
    ])

    clipboard

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

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

    clipboard

    3 最大值 $max

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

    clipboard

    4 $min 最小值

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

    clipboard

    5 $avg 平均值

    查询dev集合中size平均值

    clipboard

    6 $push 统计结果返回数组

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

    clipboard

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

    clipboard

    8 管道操作

    什么是管道操作:

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

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

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

    9 $project 聚合投影约束

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

    clipboard

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

    clipboard

    ①、$project 字符串处理

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

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

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

    clipboard

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

    并在Title_Tags字段中显示

    clipboard

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

    clipboard

    ②、$project - 算数运算

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

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

    clipboard

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

    clipboard

    ③、$project - 日期处理

    MongoDB中的日期处理

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

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

    clipboard

    插入指定日期

    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")}

    clipboard

    clipboard

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

    clipboard

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

    clipboard

    自定义日期格式

    clipboard

  • 相关阅读:
    tomcat7的catalina.sh配置说明
    nginx防攻击的简单配置
    linux系统自签发免费ssl证书,为nginx生成自签名ssl证书
    mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
    /var/log/secure 文件清空
    Linux日志文件
    记一次网站被挂马处理
    Uedit32对文本进行回车换行
    安装mysql血泪史。
    mysql-8.0.19安装教程(Windows)
  • 原文地址:https://www.cnblogs.com/houchen/p/14988940.html
Copyright © 2011-2022 走看看