未完,待填坑
聚合查询
概念
聚合操作主要用于处理数据并返回计算结果。将多个文档的值组合在一起,按条件分组后,再进行一系列操作(如sum、average、max、min) 以返回单个结果。
mongodb的聚合查询
mongodb的聚合aggregate主要用于处理数据,并返回计算后的数据结果。类似sql的count(*) group by
mongodb中,两种方式聚合:pipeline和MapReduce
- pipeline 查询速度快,但占用过多系统内存
- MapReduce 能多台机器并行计算
聚合流程
每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
需要注意:
- 每个stage的管道限制100MB的内存。可以使用
allowDiskUse 设置为true放开内存限制。 db.collection.aggregate() 可作用于分片集合,但结果不能输出在分片集合中,只能保存在一个文档中。而MapReduce可以。
和mysql比较
$match 类比于where、having $group 类比于 group by $project 类比于 select $sort 类比于 order by $limit 类比于 limit $sum 类比于 count() $lookup 类比于 join
示例
返回总数
db.zips.aggregate([
{
"$group": {
"_id": null,
"count":{//自定义字段,类比select count(*) as tables
"$sum": 1
}
}
},
{
"$project":{//不显示_id
"_id": 0
}
}
])
查询人数为10w以上的城市的数量
db.zips.aggregate([
{"$match":{
"pop":{
"$gt": 100000
}
}},
{
"$count": "count"
}
])
|