【问题标题】:difference between aggregate ($match) and find, in MongoDB?MongoDB中聚合($match)和查找之间的区别?
【发布时间】:2013-05-14 20:39:40
【问题描述】:

聚合函数内部使用的$match操作符和MongoDB中的常规find有什么区别?

为什么find 函数不允许像聚合函数一样重命名字段名称? 例如总的来说,我们可以传递以下字符串:

{ "$project" : { "OrderNumber" : "$PurchaseOrder.OrderNumber" , "ShipDate" : "$PurchaseOrder.ShipDate"}}

而 find 不允许这样做。

为什么聚合输出不作为 DBCursor 或 List 返回?还有为什么我们不能统计返回的文件?

谢谢。

【问题讨论】:

标签: mongodb


【解决方案1】:

为什么聚合输出不作为 DBCursor 或 List 返回?

创建聚合框架是为了解决需要 map-reduce 的简单问题。

此框架通常用于计算需要完整 db 作为输入和少量文档作为输出的数据。

聚合函数内部使用的$match操作符和MongoDB中的常规查找有什么区别?

正如您所说,其中一个区别是返回类型。查找操作输出返回为 DBCursor

其他区别:

还有为什么我们不能统计返回的文档?

你可以。只需计算结果数组中的元素数量或将以下命令添加到管道末尾:

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

为什么 find 函数不允许像聚合函数一样重命名字段名称?

MongoDB 很年轻,功能还在不断涌现。也许在未来的版本中,我们将能够做到这一点。在 aggregation 中重命名字段比在 find 中更重要。

编辑(2014 年 2 月 26 日):

MongoDB 2.6 aggregation operations will return a cursor.

编辑(2014 年 4 月 9 日):

MongoDB 2.6 was released with the predicted aggregation changes.

【讨论】:

  • 更新:在 mongo 3.4 中,您可以按 {$count:"number_of_elements"} 合计计数
【解决方案2】:

我调查了一些关于聚合和查找调用的事情: 我在一个包含 160k 文档的表中进行了降序排序,并将我的输出限制为几个文档。

  1. 聚合命令比查找命令慢。
  2. 如果您访问像ToList() 这样的数据,聚合命令比查找要快。
  3. 如果您观看总时间(点 1 + 2),则命令似乎相等

也许聚合会自动调用ToList() 而不必再次调用它。如果你之后不调用ToList()find() 调用会快得多。

7 [ms] vs 50 [ms](5 个文档)

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2020-08-25
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多