与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
原文地址:https://www.cnblogs.com/javasl/p/11331879.html