猿教程 Logo

.Net连接MongoDb:开始聚合

介绍

在上一篇文章中,我们研究了MongoDb .NET驱动程序中的批量写入。 我们看到了各种模型如何允许我们将一些插入,删除和更新操作打包在一个批量写入中。 组中的操作被发送到数据库以同时执行。

因此,我们已经完成了本系列最重要的CRUD操作的讨论。 我们现在熟悉了Mongo Shell和.NET驱动程序中的SELECT,UPDATE,INSERT和DELETE的基础知识。 在这篇文章中,我们将开始研究一种非常不同的查询形式,即聚合。 聚合与标准SQL中使用GROUP BY子句的分组技术相似。 然而,就概念和查询语法而言,MongoDb聚合是非常不同的。

聚合

什么是聚合? 我们可以做些什么呢? 分析数据库中的数据时,聚合很有帮助。 所有存储在各种集合中的数据本身并不太有用。 相反,您可以从具有真实价值的数据中读出信息和结论。 它可以帮助您决定将来采取的行动。 汇总在数据挖掘,商业智能(BI)和数据科学方面都非常重要,这些都是当今非常热门的话题。

通常出现的相关术语是MapReduce或MapFilterReduce。 聚合和MapReduce是类似的想法,MongoDb支持它们。 在本系列中,我将坚持使用总结,因为我在MongoDb中更熟悉它们,并且它们似乎比同等的MapReduce函数更快更有效率。 一般来说,我们可以使用聚合和MapReduce函数来表达相同类型的查询。 您可以在MongoDb中找到有关MapReduce如何实现的更多信息和代码示例。 现实生活中的分析查询可能变得相当复杂,比一般的SELECT语句还要多。

MapReduce简要总结

MapReduce非常适用于数据挖掘和大数据应用,从大型潜在的非结构化数据集中查找信息。 例如。 找到所有雇用5年以上的员工的平均年龄是该算法的良好候选者。

Map / Filter / Reduce的各个部分,即Map,Filter和Reduce是从集合中计算某些内容的链中的步骤或操作。 在所有数据挖掘案例中都不需要所有3个步骤。 基本例子:

  • 找到在公司工作5年以上的员工的平均年龄:将每个员工的年龄属性映射到整数列表,然后过滤掉已经工作不到5年的人员。 然后,您计算整数列表中元素的平均值,即将列表减少为单个结果。

  • 查找每个员工的ID:如果ID是字符串,那么您可以将ID字段映射到字符串列表中,不需要任何过滤或减少。

  • 查找所有员工的平均年龄:将每个员工的年龄映射到整数列表中,然后在减少阶段计算整数的平均值,不需要过滤

  • 查找50岁以上的所有员工:我们筛选出年龄在50岁以下的员工,不需要绘制或减少员工收藏。 取决于源数据的查询和结构,现实中的MapReduce实现可能变得相当复杂。

聚合流程

一组要分析的文档 - 聚合 - 通常需要经历各个阶段,才能获得可能是单个文档或一组文档的所需结果。 MongoDb有许多聚合阶段,都由特殊的'$'关键字表示,我们已经看过例子,如$ set和$ not。 分配一组$运算符以表示聚合管道中的阶段。

我们可以把我们的消化系统作为管道的例子。 当身体需要能量时,食物本身不是太有用。 然而,如果你吃那种食物,那么一旦你开始咀嚼它就会经历你身体的各个阶段。 最终将以各种形式,包括矿物质,纤维,维生素等,体内细胞需要正常运作。

MongoDb聚合管道也有一个或多个阶段。 一组文件将进入管道的开始,文件将在管道中从一个阶段传递到下一个阶段时改变形状。 在管道的最后,你将得到最终的结果。

我们将在本系列的这一部分中介绍一些聚合阶段和示例。 阅读下一篇文章,我们将通过第一个聚合示例。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/22.html