zoukankan      html  css  js  c++  java
  • (14)mongodb aggregate聚集框架

    与group相比,aggregate内置了很多方法,常用的如下:

      $match  相当于关系型数据库中的where
      $group   相当于关系型数据库中的group by
      $project   相当于关系型数据库中的select
      $sort  相当于关系型数据库中的order by
      $limit  相当于关系型数据库中的limit
      $sum  相当于关系型数据库中的sum
      $sum  相当于关系型数据库中的count

    db.collection.aggregate(document)  这是用法,document是一个json数组,废话不多说了 ,直接上案例,数据用上一篇随笔中的数据。

    1、查询goods下有多少条商品

      [

        {$group:{_id:null,total:{$sum:1}}}

      ]

      id为null,实际是不分组的,_id也可以随便写一个常量,比如这样写:[{$group:{_id:'cat_id',total:{$sum:1}}}] 

    2、查询每个栏目下的商品数量

      [

        {$group:{_id:'$cat_id',total:{$sum:1}}}

      ]  

      对cat_id分组,total名字任意,$sum:1,对1求和,实际是统计的行数

    3、查询每个栏目下价格大于50元的商品个数

      [
        {$match:{shop_price:{$gt:50}}},
        {$group:{_id:'$cat_id',total:{$sum:1}}}
      ]

    4、查询每个栏目下价格大于50元的商品个数、并筛选出“满足条件的商品个数”大于等于3的栏目

      [
        {$match:{shop_price:{$gt:50}}},
        {$group:{_id:'$cat_id',total:{$sum:1}}},
        {$match:{total:{$gte:3}}}
      ]

    5、查询每个栏目下的库存量

      [

        {$group:{_id:'$cat_id',total:{$sum:'$goods_number'}}}
      ]

    6、查询每个栏目下的库存量,并按照库存量排序

      [

        {$group:{_id:'$cat_id',total:{$sum:'$goods_number'}}},
        {$sort:{total:1}}
      ]

    7、查询每个栏目下的库存量,并按照库存量排序,取数量高的前3名

      [
        {$group:{_id:'$cat_id',total:{$sum:'$goods_number'}}},
        {$sort:{total:-1}},
        {$limit:3}
      ]

    8、查询每个栏目的商品平均价格,并案平均价格有高到低排序

      [
        {$group:{_id:'$cat_id',avg:{$avg:'$shop_price'}}},
        {$sort:{avg:-1}}
      ]

    查询后输出结果样式都一样,仅以(8)为例,如下:

    {
        "result" : [
            {
                "_id" : 5,
                "avg" : 3700
            },
            {
                "_id" : 4,
                "avg" : 2297
            },
            {
                "_id" : 3,
                "avg" : 1746.0666666666666
            },
            {
                "_id" : 2,
                "avg" : 823.33
            },
            {
                "_id" : 8,
                "avg" : 75.33333333333333
            },
            {
                "_id" : 15,
                "avg" : 70
            },
            {
                "_id" : 14,
                "avg" : 54
            },
            {
                "_id" : 13,
                "avg" : 33.5
            },
            {
                "_id" : 11,
                "avg" : 31
            }
        ],
        "ok" : 1
    }
    View Code

    输出结果为json,一个result,一个ok;result中json数组,存放结果,ok的值是1

  • 相关阅读:
    怎样看文献
    How to save rules of the iptables?
    Keras 自适应Learning Rate (LearningRateScheduler)
    在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
    QT5.9 新特性与版本回顾
    [常见问题]解决创建servlet 找不到webservlet包.
    MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
    MyBatis学习总结(七)——Mybatis缓存
    MyBatis学习总结(六)——调用存储过程
    MyBatis学习总结(五)——实现关联表查询
  • 原文地址:https://www.cnblogs.com/javasl/p/11331879.html
Copyright © 2011-2022 走看看