语法
db.collection.aggregate(
[
{ $match:{<query>} },
{$group: { <field1>:<field2> }}
]
)
query 是查询条件
field1 为分类字段, 要求使用 _id 表示分类字段
field2 为统计字段
示例
示例数据
db.items.insert([
{"quantity":2,price:5.0,pnumber:"p003"},
{quantity:2,price:8.0,pnumber:"p002"},
{quantity:1,price:4.0,pnumber:"p002"},
{quantity:2,price:4.0,pnumber:"p001"},
{"quantity":4,price:10.0,pnumber:"p003"},
{quantity:10,price:20.0,pnumber:"p001"},
{quantity:10,price:20.0,pnumber:"p003"},
{quantity:5,price:10.0,pnumber:"p002"}
])
统计items表的所有条目
mysql : select count(*) from items
mongodb: db.items.count()
也可以使用聚合 aggregate
db.items.aggregate([{
$group: {_id:null , count: { $sum : 1 }}
}])
_id:null 表示不分类
$sum:1 表示统计所有条目的数量
统计items表中quantity字段的总和
注意 $quantity 的两边要加双引号,否则会报错:uncaught exception: ReferenceError: $quantity is not defined
db.items.aggregate([{
$group: {_id:null , count: { $sum : "$quantity" }}
}])
类似于sql的 select sum(quantity) from items
按pnumber 分类统计items表中quantity字段的总和
从前面的插入的数据中可以看到pnumber 有三类,001 002 003
db.items.aggregate([{
$group: {_id: "$pnumber" , count: { $sum : "$quantity" }}
}])
类似于sql的 select pnumber, sum(quantity) from items group by pnumber
这个语句中可以把match<query> 加上,比如只统计 price 大于 10 的项目。
找出 price 大于10 的项并按 pnumber 分类统计items表中quantity字段的总和
db.items.aggregate([
{
$match:{price:{$gt:10}}
},
{
$group: {_id: "$pnumber" , count: { $sum : "$quantity" }}
}])
先按pnumber 分类统计items表中quantity字段的总和,再在结果集中找出总和最大的分类
按pnumber 分类,找出 quantity 总和最大的分类。
第一个group操作的结果,作为了第二次group操作的输入
db.items.aggregate([
{
$group:{ _id:"$pnumber" , count: { $sum : "$quantity" }}
}
,
{
$group:{_id:null , max: { $max: "$count"}}
}
])