MongoDB聚合查询

MongoDB聚合查询概述

MongoDB 高效的文档数据库,可以用于存储类似于

在使用find查询数据时我们可以拼接过滤条件,以返回符合条件的数据,但通常这些数据都不能直接拿来使用或传递,
需要后台再次加工后返回给前端应用。比如我们查询一个用户所有的博文就是类似的操作,通常个人信息和博文信息是分为两张表进行存储的,如果你想知道指定用户的博文时就需要进行表关联查询,如果你了解关系型数据库,那么就能更好的理解这种操作,因为这种表关联查询操作在日常开发中太常见了~

在Mongo中Aggregate命令是用于聚合查询的方法,在不增加任何参数的情况下等同于find方法,他的格式如下

collection.aggregate([阶段1,阶段2,……,阶段N])

阶段指令有 用于筛选数据的 m a t c h 、 用 于 字 段 相 关 的 match、用于字段相关的 matchproject、用于分组的 g r o u p 、 用 于 拆 分 数 据 的 group、用于拆分数据的 groupunwind、用于关联表的$lookup

筛选数据

db.getCollection('example_user').aggregate([
	{"$match":{
		"name":"姜大牛",
		"id":{"$lt":2}
	}}
])

$match的参数与find的第一个参数是一样,可以使用字段匹配或者使用范围匹配

调整字段

db.getCollection('example_user').aggregate([
	{"$project":{
		"_id":0,						//隐藏_id
		"id":"$id",						//引用自定义id
		"名字":"$address",				//修改字段名称
		"work":"作家",					//追加字段
		"isLogin":{"$literal":1},		//默认值为1或0
		"hello":{"$literal":"$美元"}	//默认值带有$
	}}
])

目录
project的参数与find的第二个参数类似,只不过具有更多的操作可选,可以追加或修改原有字段,也可以追加子文档的字段。当结果中需要使用‘ ’ 或 者 1 、 0 作 为 默 认 值 时 , 可 以 使 用 ’或者1、0作为默认值时,可以使用 10使literal进行标注,防止与mongo的语法冲突。

数据分组

分组函数

db.getCollection('example_data').aggregate([
	{"$group":{
		"_id":"$name"
	}}
])

目录

去重函数

db.getCollection('example_data').distinct("name")

目录

首先我们对去重函数和分组函数进行比较可以发现返回值有明显的区别,分组返回数据每行一条,而去重返回的数据在一个数组中。如果我们需要返回更多的字段,如分数信息,平均值等需要统计的数据时,使用分组信息会更适合。我们在对分组信息进行充实一下。

db.getCollection('example_data').aggregate([{
    "$group":{
        "_id":"$name",
        "max_score":{"$max":"$score"},		//获取最大值
        "min_score":{"$min":"$score"},		//获取最小值
        "avg_score":{"$avg":"$score"},		//获取平均值
        "sum_score":{"$sum":"$score"},		//获取总和
        "first_score":{"$first":"$score"},	//获取第一个值
        "last_score":{"$last":"$score"},	//获取最后一个值
    }
}])

目录

拆分数据

当数据中包含数组时,我们需要将数据拆分后在处理

db.getCollection('example_tshirt').aggregate([
	{"$unwind":"$size"}
])

目录

我们也可以拆分多个字段

db.getCollection('example_tshirt').aggregate([
	{"$unwind":"$size"},
	{"$unwind":"$color"}
])

联集合查询

联集合查询相当于SQL中的联表查询,通过对多个集合的数据进行整合得到我们需要的数据,格式如下

主集合.aggregate([
	{"$lookup":{
		"from":"关联集合",
		"localField":"主集合字段",
		"foreignField":"关联集合字段",
		"as":"关联集别名"
	}}
])

比如我们需要查询用户都写了哪些博文就可以按照如下的格式写

目录

当然这种数据格式对于我们来说还不够,我们可以对数据进行优化

目录

另外

搞完mongo肯定是需要拿来用的,在python中有个pymongo库,几乎可以将mongo指令直接拿来用,这样减少了我们的学习成本,相当给力

目录

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MongoDB中,聚合查询是用于对集合中的文档进行多个操作并返回计算结果的操作。常见的MongoDB聚合操作包括: - `$match`:用于筛选满足指定条件的文档。 - `$group`:用于根据指定字段对文档进行分组,并可以对分组后的文档进行一些聚合操作,如求和、计数等。 - `$sort`:用于对文档进行排序。 - `$project`:用于选择指定字段,并可以进行一些表达式的计算和转换。 - `$limit`:用于限制返回的文档数量。 - `$sum`:用于对指定字段进行求和计算。 - `$count`:用于统计文档数量。 - `$lookup`:用于对多个集合进行关联查询。 例如,以下是一个使用聚合查询的示例语法: ``` db.collection.aggregate([ { $match: { field: value } }, { $group: { _id: "$field", total: { $sum: "$field2" } } }, { $sort: { total: -1 } }, { $limit: 10 } ]) ``` 以上示例中,首先使用`$match`操作筛选出满足条件的文档,然后使用`$group`操作按照指定字段进行分组,并使用`$sum`操作对分组后的文档中的某个字段进行求和计算,接着使用`$sort`操作对求和结果进行排序,最后使用`$limit`操作限制返回的文档数量。 需要注意的是,具体的聚合查询语法可能会根据具体的需求而有所不同,上述示例仅供参考。在实际使用中,需要根据具体的字段和操作来构建合适的聚合查询语句。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【详细教程】一文参透MongoDB聚合查询](https://blog.csdn.net/bxg_kyjgs/article/details/125803527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao4-800k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值