mongo PHP aggregate,Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章 Mongodb中数据聚合之基本聚合函数count、distinct、group 和 Mongodb中数据聚合之MapReduce 中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式——聚合管道aggregate。 面对

在之前的两篇文章和中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式——聚合管道aggregate。

面对着广大用户对数据统计的需求,Mongodb从2.2版本之后便引入了新的功能聚合框架(aggregation framework),它是数据聚合的新框架,这个概念类似于数据处理中的管道。每个文档通过一个由多个节点组成的管道,每个节点都有自己的特殊的作用(分组、过滤等),文档经过由多个节点组成的管道后最终得到输出结果。管道基本的功能有两种:(1)对文档进行过滤,筛选出符合条件的文档;(2)对文档进行变换,改变文档的输出结构。

聚合管道的使用方式:db.collection.aggregate();

对于管道中的多个节点可以使用以下几种管道操作符,下面对各种管道操作符的功能进行描述:

$project:修改文档的结构(重命名、增加或删除域),也可以用于创建计算结果以及嵌套文档。

$match:过滤数据,只输出符合条件的文档。

$limit:限制MongoDB聚合管道返回的文档数。

$skip:在聚合管道中跳过指定数量的文档。

$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group:将集合中的文档分组,可用于统计结果。

$sort:文档排序输出。

$geoNear:输出接近某一地理位置的有序文档。

举两个简单的例子:

db.article.aggregate(

{ $project : {

title : 1 ,

author : 1 ,

}}

);

db.articles.aggregate( [

{ $match : { score : { $gt : 70, $lte : 90 } } },

{ $group: { _id: user, count: { $sum: 1 } } }

] );

下面对聚合管道使用过程中需要注意的地方进行说明:

(1)管道的是具有先后顺序的。

(2)$group操作目前是在内存中处理的,因此,不能对大量的文档进行使用该种方式进行分组操作;

(3)使用$unwind对数组中的字段值进行拆分时需要注意不能忘记写$符号,如{$unwind:"$tags"},tags字段前面有个$号;

(4)MongoDB 24.对内存做了优化,如果$sort出现在$limit之前,$sort只会对前$limit个文档进行操作,在内存中也只会保留前$limit个文档,节省了内存

(5)$sort操作是在内存中进行的,如果其占有的内存超过物理内存的10%,程序会产生错误

(6)管道的输出结果大小不能大于16M,超过会出现错误。

(7)如果一个管道操作符在执行过程中所占用的内存超过系统内存容量的10%,则会报错;

(8)聚合管道可以提供很好的性能和一致的接口,使用起来比较简单,对于一些简单的固定的聚集操作可以使用管道,但是对于一些复杂的、大量数据集的聚合任务还是使用MapReduce。

至此,关于Mongodb数据库内的数据聚合操作的简单描述便结束了,如果大家想更深入的学习了解,我觉得官网才是最好的教材,

6b791c2bee8127bdff5479457137e1d7.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SpringBoot集成MongoDB管道聚合可以通过使用聚合管道(Aggregation Pipeline)来实现。聚合管道MongoDB提供的一种强大的数据处理工具,可以对数据进行多个阶段的处理和转换。 在SpringBoot项目使用聚合管道,首先需要引入MongoDB的依赖,并配置MongoDB的连接信息。在yml配置文件,可以使用以下格式配置MongoDB的URI: ``` spring: data: mongodb: uri: mongodb://用户名:密码@127.0.0.1:port/库名?authSource=admin&authMechanism=SCRAM-SHA-1 ``` 其,用户名、密码、IP地址、端口号、库名等信息需要根据实际情况进行替换。 接下来,在服务层的代码,可以使用MongoTemplate或MongoOperations来执行聚合管道操作。聚合管道可以包含多个阶段,每个阶段都是一个操作,可以对数据进行筛选、排序、分组、计算等操作。 例如,可以使用聚合管道来实现对某个集合数据进行分组统计: ```java Aggregation aggregation = Aggregation.newAggregation( Aggregation.group("字段名").count().as("统计结果") ); AggregationResults<统计结果类型> results = mongoTemplate.aggregate(aggregation, "集合名", 统计结果类型.class); List<统计结果类型> resultList = results.getMappedResults(); ``` 其,字段名是需要进行分组统计的字段,统计结果是统计的结果字段名。集合名是需要进行聚合操作的集合名称,统计结果类型是自定义的结果类型。 通过以上方式,可以在SpringBoot项目使用MongoDB管道聚合功能进行数据统计和处理。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [SpringBoot集成MongoDB(2)|(级-数据统计、集合、管道处理)](https://blog.csdn.net/Oaklkm/article/details/125716072)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值