mongodb提高篇

本文介绍了MongoDB的聚合查询功能,包括聚合操作的概念、流程和与MySQL的比较。聚合操作用于处理数据并返回计算结果,例如统计、分组等。MongoDB的聚合查询通过pipeline实现,可与SQL的where、groupby、select等进行类比。示例展示了如何计算文档总数和查询人口超过10w的城市数量。
摘要由CSDN通过智能技术生成

未完,待填坑

聚合查询

概念

聚合操作主要用于处理数据并返回计算结果。将多个文档的值组合在一起,按条件分组后,再进行一系列操作(如sum、average、max、min) 以返回单个结果。

mongodb的聚合查询

mongodb的聚合aggregate主要用于处理数据,并返回计算后的数据结果。类似sql的count(*) group by

mongodb中,两种方式聚合:pipeline和MapReduce

  • pipeline 查询速度快,但占用过多系统内存
  • MapReduce 能多台机器并行计算

聚合流程

每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

在这里插入图片描述

需要注意:

  1. 每个stage的管道限制100MB的内存。可以使用allowDiskUse 设置为true放开内存限制。
  2. 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"
    }
])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值