MongoDB 聚合比较:group()、$group 和 MapReduce

2023-12-01

我对何时使用 group()、与 $group 或 mapreduce 进行聚合有些困惑。我阅读了文档http://www.mongodb.org/display/DOCS/Aggregation对于组(),http://docs.mongodb.org/manual/reference/aggregation/group/#_S_group对于 $group.. 分片是 group() 不起作用的唯一情况吗?另外,我觉得 $group 比 group() 更强大,因为它可以与聚合框架中的其他管道运算符结合使用。 $group 与 mapreduce 相比如何?我在某处读到它不会生成任何临时集合,而 mapreduce 会生成。是这样吗?
有人可以提供一个插图或引导我到一个链接,其中这三个概念一起解释,采用相同的样本数据,以便我可以轻松比较它们?

EDIT:
另外,如果您能特别指出自新的 2.2 版本发布以来这些命令中的任何新内容,那就太好了。


由于名称相似,这有点令人困惑,但group() command是一个不同的功能和实现$group管道操作员在聚合框架中。

group() 命令、聚合框架和 MapReduce 统称为聚合特征MongoDB 的。功能有一些重叠,但我将尝试解释 MongoDB 2.2.0 中每个功能的差异和限制。

Note: 内联结果集下面提到的查询是指在内存中处理并在函数调用结束时返回结果的查询。替代输出选项(目前仅适用于 MapReduce)可能包括将结果保存到新的或现有的集合中。

group() Command

  • 简单的分组语法和功能..类似于GROUP BY in SQL.

  • 返回内联结果集(作为分组项的数组)。

  • 使用JavaScript引擎实现;风俗reduce()函数可以用 JavaScript 编写。

  • 目前的限制

    • 不会分组为包含超过 20,000 个键的结果集。

    • 结果必须符合 BSON 文档(当前为 16MB)的限制。

    • 获取读锁,并且不允许任何其他线程在运行时执行 JavaScript。

    • 不适用于分片集合。

  • 也可以看看:group() 命令示例.

映射减少

  • 实现了MapReduce模型用于处理大型数据集。

  • 可以从多个中选择一个输出选项(内联、新集合、合并、替换、减少)

  • MapReduce 函数是用 JavaScript 编写的。

  • 支持非分片和分片输入集合。

  • 可用于大型集合的增量聚合。

  • MongoDB 2.2 实现了更好的支持分片映射减少输出.

  • 目前的限制

    • 一次发射只能容纳 MongoDB 最大 BSON 文档大小 (16MB) 的一半。

    • 由于存在 JavaScript 锁,因此 mongod 服务器在某个时间点只能执行一个 JavaScript 函数。但是,MapReduce 的大多数步骤都非常短,因此可以频繁产生锁。

    • MapReduce 函数可能很难调试。您可以使用print() and printjson()将诊断输出包含在mongod log.

    • 对于试图转化关系查询聚合体验的程序员来说,MapReduce 通常并不直观。

  • 也可以看看:映射/归约示例.

聚合框架

  • MongoDB 2.2.0 生产版本(2012 年 8 月)中的新功能。

  • 旨在提高性能和可用性的特定目标。

  • 返回内联结果集。

  • 支持非分片和分片输入集合。

  • 使用“管道”方法,对象在通过一系列管道运算符(例如匹配、投影、排序和分组)时进行转换。

  • 管道操作员不需要为每个输入文档生成一个输出文档:操作员还可以生成新文档或过滤掉文档。

  • 使用投影,您可以添加计算字段、创建新的虚拟子对象以及将子字段提取到顶层结果中。

  • 管道运算符可以根据需要重复(例如,多个$project or $group steps.

  • 目前的限制

    • 结果以内联方式返回,因此仅限于服务器支持的最大文档大小 (16MB)

    • 不支持与 MapReduce 一样多的输出选项

    • 仅限于运算符和表达式由聚合框架支持(即不能编写自定义函数)

    • 用于聚合的最新服务器功能,因此在文档、功能集和使用方面有更多的成熟空间。

  • 也可以看看:聚合框架示例.

有人可以提供一个插图或引导我到一个链接,其中这三个概念一起解释,采用相同的样本数据,以便我可以轻松比较它们?

您通常找不到比较所有三种方法有用的示例,但以下是之前的 StackOverflow 问题,其中显示了不同的情况:

  • group() 与聚合框架
  • MapReduce 与聚合框架
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 聚合比较:group()、$group 和 MapReduce 的相关文章

  • 无法在 mongodb 中创建角色

    我正在尝试在 mongodb 中创建一个新角色 但它给了我错误 gt use Admin switched to db Admin gt db createRole role executeFunctions privileges reso
  • 如何将后端计时器与移动应用程序同步

    我正在开发一个选择用户并有 15 秒时间的应用程序 该用户响应的计时器 用户应用程序每 5 秒查询一次数据库 以查看是否选择了该用户 如果是这样 移动应用程序将开始 15 秒 定时器 问题是计时器永远不会匹配 因为用户应用程序可以位于与后端
  • 如何统计MONGODB中所有唯一值? [复制]

    这个问题在这里已经有答案了 date 2017 09 04 description DD from my employer1 amount 1000 33 date 2017 09 06 description DD from my emp
  • 如何从 mongoDB 数组中仅返回匹配的元素

    我已经找这个问题一个星期了 我不明白为什么它仍然不起作用 我将此对象放入我的 MongoDB 数据库中 produc cod prod 0001 description Ordenador price 400 current stock 3
  • NodeJS、Mongoose:如何使用 mongoose 获取相关数据

    我有 2 个集合 它们是一对多的关系 如何使用猫鼬获取相关数据作为嵌套文档 我有 2 个模式 它们是这样相关的 var userSchema mongoose Schema name String age Number var postSc
  • J=1 且 W=Majority 的 MongoDB 副本集上是否仍会发生回滚?

    我一直在阅读文档 根据我的理解 我可以看到仍然可能发生回滚的情况 写入到主数据库 确认日志已写入磁盘 大多数辅助节点确认写入但不写入磁盘 整个集群断电 当电源恢复时 主设备由于某种原因无法启动备份 次要角色扮演主要角色 最初的主节点最终启动
  • 获取背景图片url值

    我正在尝试获取背景图像 url 的值 url 直接在元素标签中使用 style 属性内联设置 如下所示 a style background image none a 我尝试做 var url this css background ima
  • 使用 mongodb/mongoid 排序时,有没有办法将所有 nil 值放在最后?

    除了问题中已有的内容之外 确实没什么可说的 使用 monoid People asc age 我首先得到零值 有没有办法总是返回nillast 或者告诉 mongodb 将 nil 视为非常高 与回答的完全一样sql中同样的问题在这里 ht
  • 过滤$lookup结果

    我有 2 个集合 带有示例文档 reports id R1 type xyz 报告文件 id F1 reportid R1 time ISODate 2016 06 13T14 20 25 812Z id F14 reportid R1 t
  • 如何获取从中提取数据的服务器的服务器地址

    我知道我们使用cursor getServerAddress 在Java 驱动程序中拥有它 但是 我在 C 中找不到任何相关的调用 不幸的是 在深入研究 C 驱动程序源代码 以及 Java 源代码以了解它在做什么 之后 用作获取一部分的实际
  • 如何在 mongodb 中对数组进行 AND 查询?

    我有一个带有标签的数组 它是文档的一部分 例如 红 绿 蓝 白 黑 现在我想找到所有有红色和蓝色的文档 使用 all 条件查找同时匹配 红色 和 蓝色 条件的记录 db my collection find tags all red blu
  • 如何使用官方 MongoDB C# 驱动程序将 BsonDocument 转换为强类型对象?

    出于单元测试的目的 我想测试我的类映射 而无需在 MongoDB 数据库中读取和写入文档 为了处理特殊情况 例如循环父 子引用和只读属性 我使用了BsoncClassMap RegisterClassMap lt MyType gt 一些自
  • 如何在聚合框架中按位置修改数组中的值

    假设有一个简单的文档 array a b c d 如何修改second值在聚合 With update这很简单 db collection updateOne set array 1 B gives array a B c d 在聚合框架中
  • MongoDB:查询速度慢,即使有索引

    我有一个网页 它使用 MongoDB 来存储和检索各种测量结果 突然 在某个时候 我的网页变得如此缓慢 以至于无法使用 事实证明 我的数据库是罪魁祸首 我进行了搜索 但没有找到任何解决我的问题的方法 我很抱歉 因为我对 MongoDB 还很
  • Mongo中如何定义每个分片的分片范围?

    比方说 该文件是 x Number 我有 3 个碎片 除了自动分片之外 我可以具体定义 shard1 仅包含数据 x 你可以 可以手动预分割块 如下所述 http www mongodb org display DOCS Splitting
  • mongoose node.js,使用 $lt 和 $gt 进行查询不起作用

    我想要获取最后分数在 15 到 20 之间的所有学生 为此 我使用 mongoose 在 mongoDB 中执行以下查询 模型工作正常 所有其他查询都正常 Pupils find marks 1 value lt 20 marks 1 va
  • mongoose 查询:通过 id 在数组中查找对象

    我怎样才能在此 Schema 中通过 id 找到图像 我有用户的 id 和我正在寻找的图像的 id 执行此操作的最佳方法是什么 在这种情况下 所有图像是否具有不同的 id 或者它们是否可以具有相同的 id 因为它们不属于同一用户 我的架构如
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • MongoDb 如何按月和年聚合

    我是 mongodb 新手 正在尝试学习 MongoDB 查询 id ObjectId 59815d4704ca1760a45957ca userEmail email protected cdn cgi l email protectio

随机推荐

  • 如何拉伸图像以填充 UILabel 中背景中设置的标签宽度?

    我有简单的基于视图的应用程序 我只采取了UILabel on it 以下是我在 viewDidLoad 中的代码 lblBack textColor UIColor blueColor UIImage img UIImage imageNa
  • 将变量从 JSP 传递到 servlet

    一直以来 当我在 Google 上搜索时 我得到了许多关于从 JSP 向 servlet 传递变量的答案 这些答案都发布在 Stackoverflow 中 但我想知道 我没有得到以下答案 How to pass a variable fro
  • 用python计算字母数

    我想做的是计算每个字母在字符串中出现的次数 我想将详细信息存储在字典中 以下是我的尝试 def scan string list string for letter in string list string append letter l
  • ImportError: DLL 加载失败: %1 不是 _imaging 模块的有效 Win32 应用程序

    我正在尝试使用 Python 2 7 9 中的灰度共生矩阵从图像中提取特征 我在其他答案中找到了下面给出的代码 当我运行这段代码时 我得到 ImportError 未安装 imaging C 模块 然后我安装了 PIL 模块 当我尝试导入它
  • Android - Crashlytics,在崩溃期间运行代码

    我遇到了一个严重的崩溃案例 这是由于某些异步在 SQLite 中以不正确的顺序执行操作而导致的 结果崩溃了 我花了一些时间来调试所有这些 并且访问内部数据库会有很大帮助 我知道如何访问开发设备上的内部数据库 但如果出现问题 我希望能够获得该
  • head 中存在重复的 JSON-LD 脚本

    我必须注射多个scriptJSON LD 数据的元素到head我的申请 全部都属于同一 type 这是由于从不同的数据源提取不同的字段 这种重复会导致任何问题吗 我希望谷歌能将其简单地翻译为
  • 如何检查字符串不为空?

    if string equals 如何检查字符串是否不为空 if string equals 检查 null 是通过以下方式完成的if string null 如果你想检查它是否为空或为空 你需要if string null string
  • Python - if 语句无法正常工作[重复]

    这个问题在这里已经有答案了 我刚刚开始使用 python 并且被困在一些在我看来显然应该有效的东西上 这是我的第一个代码 我只是尝试与用户进行对话 year input What year are you in school yearlik
  • 协变克隆函数的误解

    这个问题与最近的一个问题有关多态性不适用于相同数据类型 基类和继承类 的函数返回值 考虑代码 include
  • Python pytz时区转换返回与不同日期的时区偏移量不同的值

    我试图将美国 东部时区日期转换为 UTC 以上传到仅接受 UTC 时间但显示本地时区时间的网站 我有以下代码示例 其中当我转换最近的日期时 偏移量 5 00 或 4 00 没有问题 但是当我转换诸如 1900 01 01 之类的日期时 偏移
  • 表[ ] 输出基数

    The Table 命令通常返回一个与其迭代器具有相同基数的列表 Table i i 4 gt 1 2 3 4 很容易证明可以返回带有greater基数高于迭代器 Table Sequence ConstantArray 1 i i 2 g
  • 我可以在 Nodejs (ES7) 中解雇并忘记承诺吗?

    我想用 babel 运行这段代码 redisClientAsync delAsync key return await someOtherAsyncFunction 在异步函数中没有await第一行 这个可以吗 我还能怎样运行我不关心的事情
  • 自定义 Aurelia 以使用 .cshtml

    我发现一篇非常有用的文章 展示了如何将 Razor 部分 cshtml 与 aurelia 一起使用 但是 我无法运行代码 并从 RobEisenberg 评论中得知 ConventionalViewStrategy convertModu
  • 如何禁用 VSCode 上的内联提示? (Java)[重复]

    这个问题在这里已经有答案了 我想在我的编辑器上禁用这个弹出帮助程序 我怎么做 在我的 null 旁边有一个奇怪的 下一个 东西 谢谢 嗯 这段文字叫做镶嵌提示 or 内联提示 进一步来说内联参数提示 对于 Java 它将与参数相同 name
  • VBA Excel 中基于列标题的动态列选择

    我有以下代码来根据标题选择列 Dim rng1 As Range Set rng1 Range Range A1 Z1 Find Name Range A1 Z1 Find Name End xlDown 当尝试使用此范围并在图表上设置 X
  • 如何在没有提示的情况下从 Internet Explorer 直接打印到标签打印机

    我有一个包含 upc 编号的 mysql 数据库 我想用斑马打印机 LP2824 打印到标签上 我希望能够以某种方式将这些数字直接发送到我的标签打印机 这不是默认打印机 无需提示用户 据我所知 IE 是唯一的选择 因为需要某种类型的 Act
  • 注释掉 XML

    考虑这段 XML
  • bash 脚本:如何有效地在字符串末尾附加字符 (O(1))

    简单问题 我有一个包含 n 个条目的数组 A 每个条目包含一个字符 我想 以有效的方式从该数组创建相应的字符串 S 即在 O n 时间内 无需使用外部命令 只需 bash 代码和 bash 内置命令 这种明显的方式 func slow lo
  • 类继承/方法重写

    这是我第一次与课程一起工作 所以请原谅我的无知 我有一个 Pet 类 它是我的基类 我有两个儿童班 狗和猫 我想做的是让 Cat 和 Dog 方法通过说 Woof 来覆盖 Pet 方法 和 喵 而不是说话 然后 在另一种形式中 我必须在按下
  • MongoDB 聚合比较:group()、$group 和 MapReduce

    我对何时使用 group 与 group 或 mapreduce 进行聚合有些困惑 我阅读了文档http www mongodb org display DOCS Aggregation对于组 http docs mongodb org m