zoukankan      html  css  js  c++  java
  • mongoDB 聚合操作

    聚合操作

    概念  对文档进行数据整理和统计

    聚合函数

     命令

    db.collection.aggregate()

    功能  完成聚合操作, 获取操作数据

    参数  聚合条件, 配合聚合操作符使用

    聚合操作符

    $group

    db.class.aggregate({$group:{_id:"$域名",随意的名字用于显示:{$统计操作符:取值}}})

    功能  分组聚合 需要配合一定的统计操作符

    格式  

    {$group:{_id:" ", xxx:{$avg:"$age"}}}

    ps:

      _id 是固定的字符, 表示被选中作为分组依据的域

      xxx 为新增显示的域名 

      xxx 之后的内容就是对这个新增域 的一个数据计算了. 这时候要搭配 聚合操作符了

     聚合统计操作符

    统计求和  $sum

    将 class 集合 按照 sex 分组, 然后计算每个 分组的人数, 最后赋值给 num 字段来展示
    >
    db.class.aggregate({$group:{_id:"$sex",num:{$sum:1}}}) { "_id" : "g", "num" : 2 } { "_id" : "b", "num" : 1 } { "_id" : null, "num" : 13 }
     按照 性别分组 后计算 age 的综合
     > db.class.aggregate({$group:{_id:"$sex",Age:{$sum:"$age"}}})
     { "_id" : "g", "Age" : 36 }
     { "_id" : "b", "Age" : 75 }

    求平均数  $avg

    按照 性别 分组后, 新增 Age 列, 内容为 age 域的平均值
    >
    db.class1.aggregate({$group:{_id:"$sex",Avg:{$avg:"$age"}}}) { "_id" : "g", "Avg" : 26.666666666666668 } { "_id" : "b", "Avg" : 41.333333333333336 }

    求最大值 / 最小值  $max / $min

    按照 性别 分组后, 新增 mum 列, 内容为 age 域的最大值
    >
    db.class1.aggregate({$group:{_id:"$sex",mum:{$max:"$age"}}}) { "_id" : "g", "mum" : 36 } { "_id" : "b", "mum" : 78 }


    按照 性别 分组后, 新增 mum 列, 内容为 age 域的最大值
    > db.class1.aggregate({$group:{_id:"$sex",mum:{$min:"$age"}}})
    { "_id" : "g", "mum" : 18 }
    { "_id" : "b", "mum" : 18 }

    求首/ 末值  $first / $last

    按照 性别 分组后, 新增 mum 列, 内容为 age 域的第一个值
    > db.class1.aggregate({$group:{_id:"$sex",mum:{$first:"$age"}}})
    { "_id" : "g", "mum" : 18 }
    { "_id" : "b", "mum" : 18 }
    按照 性别 分组后, 新增 mum 列,  内容为 age 域的最后一个值
    > db.class1.aggregate({$group:{_id:"$sex",mum:{$last:"$age"}}})
    { "_id" : "g", "mum" : 36 }
    { "_id" : "b", "mum" : 78 }
    >

    获取指定域的集合文档数据  $project

    只显示 name , age 域
    > db.class1.aggregate({$project:{_id:0,name:1,age:1}})
    { "name" : "aa", "age" : 18 }
    { "name" : "bb", "age" : 28 }
    { "name" : "cc", "age" : 78 }
    { "name" : "dd", "age" : 18 }
    { "name" : "ee", "age" : 26 }
    { "name" : "ff", "age" : 36 }
    只显示 name , age 域, 且 重命名为 Name 和 Age
    > db.class1.aggregate({$project:{_id:0,Name:"$name",Age:"$age"}})
    { "Name" : "aa", "Age" : 18 }
    { "Name" : "bb", "Age" : 28 }
    { "Name" : "cc", "Age" : 78 }
    { "Name" : "dd", "Age" : 18 }
    { "Name" : "ee", "Age" : 26 }
    { "Name" : "ff", "Age" : 36 }

    数据筛选  $match

    $match 值 写法同 query 参数

    筛选年龄大于等于 20 的文档
    > db.class1.aggregate({$match:{age:{$gt:20}}})

    显示前几条  $limit

    显示前三条文档
    > db.class1.aggregate({$limit:3})

    跳过前几条文档显示后面内容  $skip

    跳过前3条显示后面内容
    > db.class1.aggregate({$skip:3})

    排序  $sort

    将集合文档按照年龄升序排序
    > db.class1.aggregate({sort:{age:1}})

    聚合管道

    定义  将多个聚合操作合并在一起完成.即将上一个聚合的操作结果作为下一个聚合的操作对象,直到所有的操作完成

    > db.class1.aggregate([{},{},{}}

    实例

    按照年龄排序后, 不显示 _id
    > db.class1.aggregate([{$sort:{age:1}},{$project:{_id:0}}])
  • 相关阅读:
    Redis未授权访问攻击过程与防范
    Redis安装
    Connection closing...Socket close. Connection closed by foreign host. Disconnected from remote host(centos6.9) at 14:59:05.
    windows远程xshell文件上传下载:
    Linux重置MySQL密码
    nginx rewrite 实现URL跳转
    Openstack 清除openstack网络与路由 (十七)
    创建 OpenStack云主机 (十五)
    OpenStack 存储服务 Cinder存储节点部署LVM (十四)
    OpenStack 存储服务 Cinder介绍和控制节点部署 (十三)
  • 原文地址:https://www.cnblogs.com/shijieli/p/10476767.html
Copyright © 2011-2022 走看看