MongoDB聚合框架支持非聚合操作吗?

时间:2019-07-03 08:21:33

标签: mongodb

我使用MongoDB聚合进行了以下查询,

db.users.aggregate({$project: {"name":1}})

结果是:

{ "_id" : ObjectId("5d19a17a368e9d89b84269b2"), "name" : "sharon" }
{ "_id" : ObjectId("5d19a186368e9d89b84269b5"), "name" : "paul" }
{ "_id" : ObjectId("5d19a1a7368e9d89b84269b8"), "name" : "paul" }
{ "_id" : ObjectId("5d19a1bb368e9d89b84269bb"), "name" : "sharon" }
{ "_id" : ObjectId("5d19a1ca368e9d89b84269be"), "name" : "paul" }
{ "_id" : ObjectId("5d19a1cf368e9d89b84269c1"), "name" : "paul" }

这实际上等效于

db.users.find({"name":1})

因此,aggregate支持非聚合操作,我感到困惑和惊讶,

我认为aggregateSQL group by类似,但是上面的查询在SQL中是不可能的

2 个答案:

答案 0 :(得分:1)

  

我认为GaussianBluraggregate类似,但是上面的查询在SQL中是不可能的

完全没有。聚合框架定义了许多可能的阶段,您可以将其放入数据中,其中$project是其中之一。每个阶段都以某种方式修改结果集。您需要考虑进入文档集,出现不同文档集的每个阶段。 Grouping是您在聚合阶段可以执行的操作之一,但是有many more possible transformations

答案 1 :(得分:1)

在聚合框架中最接近find的事物是$match运算符。

Aggregation Framework的使用是为了简化对大量条目的查询,并生成少量对您有价值的结果。

虽然可以将查找结果用于处理结果,但这将涉及用于执行查找和进一步操作的基础编程语言的性能。

在聚合框架中,只有mongoengine决定性能,因此可能会让您更轻松。