(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
输出结果为json,一个result,一个ok;result中json数组,存放结果,ok的值是1
以上是关于(14)mongodb aggregate聚集框架的主要内容,如果未能解决你的问题,请参考以下文章
Ruby操作MongoDB(进阶八)-聚合操作Aggregation
DROP AGGREGATE - 删除一个用户定义的聚集函数