MongoDB中聚合($ match)和find之间的区别?

时间:2013-05-14 20:39:40

标签: mongodb

聚合函数中使用的$match运算符与Mongodb中的常规find之间有什么区别?

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

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

然而,find不允许这样做。

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

谢谢。

2 个答案:

答案 0 :(得分:28)

  

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

创建聚合框架是为了解决容易出现问题的问题,否则需要map-reduce。

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

  

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

其中一个差异,就像你说的那样,是返回类型。查找操作输出返回为 DBCursor

其他差异:

  

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

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

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

为什么find函数不允许重命名字段名称,如聚合函数?

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

编辑(2014/02/26):

MongoDB 2.6 aggregation operations will return a cursor

编辑(2014/04/09):

MongoDB 2.6 was released with the predicted aggregation changes

答案 1 :(得分:0)

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

  1. Aggregation命令比find命令慢。
  2. 如果您访问ToList()之类的数据,则聚合命令比查找更快。
  3. 如果你看总时间(点1 + 2),命令似乎相等
  4. 也许聚合会自动调用ToList(),而不必再次调用它。如果您之后没有拨打ToList()find()电话会更快。

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

相关问题