30

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

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

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

而 find 不允许这样做。

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

谢谢你。

4

2 回答 2

33

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

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

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

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

正如您所说,差异之一是返回类型。查找操作输出作为DBCursor返回。

其他区别:

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

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

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

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

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

编辑(2014/02/26):

MongoDB 2.6 聚合操作将返回一个 cursor

编辑(2014/04/09):

MongoDB 2.6 发布时带有预测的聚合变化

于 2013-05-14T22:09:07.617 回答
0

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

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

也许聚合会自动调用ToList()并且不必再次调用它。如果你ToList()以后不打电话,find()电话会快得多。

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

于 2017-07-18T16:09:04.070 回答