MongoDB的聚合操作

本文介绍了MongoDB的聚合操作,重点讲解了聚合管道的概念,包括$match、$group、$project和$sort等操作的用法。通过一个实例展示了如何统计企业小区的出售和出租房源数量,帮助理解聚合管道的工作原理。
摘要由CSDN通过智能技术生成

MongoDB聚合

MongoDB中聚合(aggregate)主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值分组在一起,并且可以对分组的数据执行各种操作以返回单个结果。MongoDB提供了三种执行聚合的方法:聚合管道、map-reduce函数和单一目的的聚合方法。本文主要介绍聚合管道相关的操作。

管道的概念

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。接下来介绍一下聚合框架中常用的几个操作:

$match:用于过滤数据,只输出符合条件的文档。
用法:{ $match: { } }

$group:通过指定的_id表达式对输入文档进行分组,还可以用于统计结果。每个输出文档的_id字段的值都是唯一的。
用法:

{
$group:
{
_id: , // Group By Expression
: { : },

}
}
$project:修改输入文档的字段,可以用来重命名、增加或删除字段。
用法:{ $project: { <specification(s)> } }

$sort:将输入文档排序后输出
用法:{ $sort: { : , : … } }

$limit:用来限制MongoDB聚合管道返回的文档数。
用法:{ $limit: }

举例说明

获取企业小区统计信息:该企业每个小区出售房源和出租房源的个数。

db.team_house_v2.aggregate([
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: …_flag_inner": { ne: 1},
“teamId”: “5e82e4c62d7f120001e0a570”,
“ownedProperty.unitOwnedForVisitor.state”: 2,//房源状态为在租在售,其他为资料方
}
},
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: … communityId: "commonProperty.unitCommonForVisitor.communityId",
teamId: “$teamId”,
//出售的房源
sellType: {
KaTeX parse error: Expected '}', got 'EOF' at end of input: … if: { in: ["$ownedProperty.unitOwnedForVisitor.unitType", [0, 2]]},
then: 1,
else: 0,
},
},
//出租的房源
rentType: {
KaTeX parse error: Expected '}', got 'EOF' at end of input: … if: { in: ["$ownedProperty.unitOwnedForVisitor.unitType", [1, 2]]},
then: 1,
else: 0,
},
},
}
},
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: … communityId: "communityId",
teamId: “$teamId”
},
sellCount: {
s u m : " sum: " sum:"sellType",
},
rentCount: {
s u m : " sum: " sum:"rentType",
}
}
}
]);
分析:

g r o u p 操 作 : 用 于 筛 选 出 该 企 业 所 有 在 租 在 售 的 房 源 信 息 , 然 后 将 符 合 条 件 的 记 录 送 到 下 一 阶 段 group操作:用于筛选出该企业所有在租在售的房源信息,然后将符合条件的记录送到下一阶段 group

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB提供了三种方式来执行聚合操作聚合管道方法、map-reduce方法和单一目标聚合方法。聚合管道方法可以理解为合计流水线法,通过对集合中的文档记录进行分类统计。该方法支持分片集合操作。使用聚合管道方法可以通过传递一系列的操作符来实现各种统计操作,比如求和($sum)、求平均值($avg)、取最小值($min)、取最大值($max)等等。聚合管道方法的语法如下: ``` db.collection_name.aggregate( [ {$match:{<field>}}, // 统计查找条件 {$group:{<field1>, <field2>}} // field1为分类字段;field2为含各种统计操作符的数值型字段,如$sum、$avg、$min、$max、$push、$addToSet、$first、$last操作符 ) ``` 聚合分类统计是聚合操作的一种,目前在MongoDB中有两种聚合操作功能:count()和distinct()。count()用于计算满足指定条件的文档数量,distinct()用于返回指定字段的唯一值列表。使用这两个方法可以对集合中的数据进行简单的聚合统计。 我希望这些信息对您有所帮助。<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/cold___play/article/details/121447382)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值