(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

原文地址:https://www.cnblogs.com/javasl/p/11331879.html