原创 mongodb_常用操作命令笔记_2_聚合查询专题

本文介绍了MongoDB的聚合操作,包括聚合aggregate的难点、常用管道如$group、$match、$project、$unwind等,以及各种表达式的应用,如$sum、$avg、$min、$max等,用于统计和数据处理。
摘要由CSDN通过智能技术生成

1. 聚合aggregate–难点

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})
在这里插入图片描述

2. 常用管道

  • 在mongodb中,⽂档处理完毕后,通过管道进⾏下⼀次处理 常用管道如下:
  • $group: 将集合中的⽂档分组, 可⽤于统计结果
  • $match: 过滤数据, 只输出符合条件的⽂档
  • $project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
  • $sort: 将输⼊⽂档排序后输出 $limit: 限制聚合管道返回的⽂档数
  • $skip: 跳过指定数量的⽂档, 并返回余下的⽂档
  • $unwind: 将数组类型的字段进⾏拆分

3. 常用表达式

  • 处理输⼊⽂档并输出 语法:
  • 表达式:’$列名’ 常⽤表达式:
  • $sum: 计算总和
  • $sum:1 表示以⼀倍计数
  • $avg: 计算平均值
  • $min: 获取最⼩值
  • $max: 获取最⼤值
  • $push: 在结果⽂档中插⼊值到⼀个数组中
  • $first:根据资源⽂档的排序获取第⼀个⽂档数据
  • $last: 根据资源⽂档的排序获取最后⼀个⽂档数据

4. $group

  • $group: 将集合中的⽂档分组, 可⽤于统计结果
  • 列: 统计 男生和女生的人数, 输出格式: _id:性别, counter:人数
  • 输出: { “_id” : “1001”, “name” : “01”, “age” : 15, “gender” : “男” } 等等 …
 db.test.aggregate(
					{$group:
						{
							_id: '$gender',
							counter: {$sum:1}
						}
					}
				)

5. $match

  • $match: 过滤数据, 只输出符合条件的⽂档
  • 列: 过滤年大于20的人,统计出男生男生的人数
  • 输出:
  • { “_id” : “女”, “counter” : 3 } 等等…
db.test.aggregate(
			{$match:{age:{$gt:20}}},
			{$group:{id:"$gender", counter:{$sum:1}}}
	)

6.project

  • $project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
  • 列: 过滤年大于20的人,统计出女生男生的人数,
  • 输出格式:
  • { “counter” : 3, “gender” : “女” }
    { “counter” : 3, “gender” : “男” }
db.test.aggregate(
				{$match:{age:{$gt:20}}},
				{$group:{_id:"$gender", counter:{$sum:1}}}
				{$project:{_id:0, gender:"_id", counter:1}}
			)

7. $unwind

  • $unwind: 将数组类型的字段进⾏拆分
 - 语法:db.集合名称.aggregate({ $unwind:'$字段名称'})
db.t2.insert({_id:1,item:'t-shirt',size:['S','M','L']})
db.t2.aggregate({$unwind:'$size'})
结果如下:
{ "_id" : 1, "item" : "t-shirt", "size" : "S" }
{ "_id" : 1, "item" : "t-shirt", "size" : "M" }
{ "_id" : 1, "item" : "t-shirt", "size" : "L" }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值