(14)mongodb aggregate聚集框架

Posted javasl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(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

以上是关于(14)mongodb aggregate聚集框架的主要内容,如果未能解决你的问题,请参考以下文章

Ruby操作MongoDB(进阶八)-聚合操作Aggregation

MongoDB Aggregate - 放松、分组和项目

DROP AGGREGATE - 删除一个用户定义的聚集函数

MongoDB $reduce(aggregation) 组与数组中嵌套文档的总和并按组计数

MongoDB聚合(单一用途的聚合方法)

[设计模式]迭代子模式 Iterator