MongoDB聚合的定义
MongoDB聚合使用aggregation()方法来执行聚合操作。基本上,这种聚合操作练习数据记录并提供计算结果。聚合操作将来自不同文件的值集合在一起,并且能够对集合的数据执行一系列的操作,如平均、总和、最大、最小等,只提供一个结果。MongoDB聚合在SQL中对应的是count(*)和与group by。MongoDB聚合与SQL中提供的聚合函数相同。
MongoDB支持三种技术来执行聚合操作。
单一目的聚合
聚合流水线
地图还原功能
因此,聚合被应用于对集合中的文档进行查询操作的结构,同时减少和改变它们。
语法。
让我们查看MongoDB aggregate()方法的一般语法,写法如下。
Db.NAME_OF_COLLECTION.aggregate(AGGREGATE_OPERATION);
由于MongoDB聚合包括三种方式,所以。
聚合管道(Aggregation Pipeline
由于MongoDB的聚合框架是以数据处理管道的思想为模型的,所以文档插入一个多阶段的管道,将文档改变成一个聚合的结果。
这可以用一个例子来说明,如下。
Db.products.aggregate([ {$match: {status: “X”}}, {$group: {_id: “$pro_id”, total: {$sum: “$amount”}}} ])
让我们详细解释上述例子。
第一阶段:在这个阶段,$match阶段将通过字段状态过滤文档,然后将那些持有状态字段等于 "X "的文档传递给后续阶段。
第二阶段:在这个阶段,$group阶段将通过字段pro_id对文档进行分组,以计算每个不同pro_id的总金额。
最简单的流水线阶段支持执行查询的过滤器和改变结果文件形式的文件转换。而其他流水线操作支持按特定字段或许多字段对文件进行分组和排序的工具,以及其他工具对由文件数组组成的数组内容进行汇总。总的来说,流水线阶段可以使用运算符来完成一些任务,如连接字符串或计算平均数。
因此,该管道通过MongoDB内部的内置操作提供了资源丰富的数据聚合,并可被视为MongoDB中应用的数据聚合的首选技术。这个聚合管道也可以在一个分片的集合上执行。它有一个内部优化阶段。
单一目的聚合操作
对于聚合,MongoDB也提供了。
db.collection.distinct(), db.collection.estimatedDocumentCount() and db.collection.count().
这些所有的操作将从一个单独的集合中聚合文档。然而,这些操作提供了对公共聚合过程的基本访问,但缺乏聚合管道的灵活性和能力。
Map-Reduce
基本上,聚合管道提供了比MongoDB中的map-reduce操作更好的实用性和性能。
这种map-reduce操作可以通过聚合管道操作符(如group等)进行重写。它需要自定义功能,所以MongoDB从4.4版本开始支持JavaScript中的accumulator聚合运算符。
要查看map-reduce操作的聚合管道替代实例,我们需要进一步学习高级Map-Reduce聚合管道及其实例。
聚合在MongoDB中如何工作?
当我们需要从MongoDB收集指标用于任何图形说明或其他操作时,没有比MongoDB聚合更好的方法。MongoDB中的聚合负责处理数据,这导致了计算输出,通常是通过从几个文档中集合数据,然后以各种方式执行这些集合的数据,以产生一个集体结果。它对文档进行实践,然后产生计算输出,从而对集合的数据执行一系列的操作,只返回一个结果。
MongoDB中的聚合是在有限制的情况下进行的,因为有数以百万计的嵌入式文档,在处理时需要很多时间,而且服务器的随机内存可能会终止操作。
MongoDB的聚合使用了UNIX命令中的管道概念,管道定义了对少数输入进行操作的可能性,并将输出结果作为后续命令的输入,它遵循同样的原则。MongoDB在聚合框架中支持这种想法。
这里,运算符有三个范围,如阶段、表达式和累加器。
有一组可能的阶段,每一个阶段都被视为一组文档的输入,并产生一个结果的文档组(否则就是管道完成时的最后一个JSON文档。然后,这将反过来为后续阶段实现,同样地。聚合框架中确定的一些可能的阶段如下。
1.$match。这是一个过滤操作,因此这可以减少作为输入到后续阶段的文件数量。
2.project。它被应用于从一个集合中选择几个特定的字段。
3\. group:它执行我们正在讨论的具体聚合。
4.4.limit:它限制了要看的文件的总和,由现有的位置开始的特定数字提供。
6.6.unwind。它是用来解开使用数组的文件的。当应用一个数组时,数据元素是一个预连接的形式,然后这个操作将与此解开,以包括另一个不同的文档。因此,在这个阶段的帮助下,我们可以增加后续阶段的文件总数。
例子
假设,我们有如下的数据集合,我们使用了'test'数据库,相关的集合名称是'books'。
show dbs use test show collections
Db.books.find().pretty() { _id: ObjectID(60e6e3242908975c299b09b1), title: ‘Overview of MongoDB’, description: ‘MongoDB database tool is a No SQL database.’, by_publisher: ‘my books’, url: ‘http://www.mybooks.com’, tags: [‘NoSQL’, ‘Databases’, ‘MongoDB’], likes: 100 }, { _id: ObjectID("60e6e4252908975c299b09b2), title: ‘SQL’, description: ‘SQL is structured query language used in RDBMS.’, by_publisher: ‘my books’, url: ‘http://www.mybooks.com’, tags: [‘SQL’, ‘RDBMS’, ‘MongoDB’], likes: 500 },
输出。
_id:ObjectID(),对于我们使用db.collection_name.insert({writeConcern: , ordered: })语法插入到集合中的每个数据都是不同的。在我们执行这个命令后,它将返回WriteResult对象,因此,我们将通过MongoDB _id字段的创建获得ObjectID,并为进一步的操作进行验证。
使用集合的详细信息,查看定义每个出版商写了多少本书的列表,以及两本书的所有喜欢的总和,我们将应用聚合()方法的语法,如下所示。
结论
MongoDB聚合的功能是一个管道,或者说是一个对数据实施的过滤器/操作器的列表。在这里,我们可以将一个集合放入顶部,并通过一系列的操作来改变它,最终从底部弹出一个结果。
聚合框架被引入,它对文件进行组合,以加强扫描的过程,在不同的阶段对文件进行操作,用给定的标准或操作进行相应的处理,以执行同等的结果。
推荐文章
这是一篇关于MongoDB触发器的指南。这里我们讨论了定义、语法、触发器如何在Mongodb中工作?例子,以及代码实现。你也可以看看下面的文章,以了解更多的信息
The postMongoDB Aggregationappeared first onEDUCBA.