mongodb聚合:链接聚合

时间:2014-03-11 19:26:33

标签: mongodb

不确定是否可以这样做,但我得问:

我可以在一个请求中发送多个聚合吗?换句话说,而不是做以下事情:

one_results = db.results.aggregate([ 
    { $project: { _id: 0, key: "$Field1" }}, 
    { $group: { '_id': '$key', count: { $sum: 1 }}} ])

two_results = db.results.aggregate([ 
    { $project: { _id: 0, key: "$Field2" }}, 
    { $group: { '_id': '$key', count: { $sum: 1 }}} ])

我想做这样的事情:

[one_results, two_results] = db.results.aggregate(
  [ 
    { $project: { _id: 0, key: "$Field1" }}, 
    { $group: { '_id': '$key', count: { $sum: 1 }}} 
  ],
  [ 
    { $project: { _id: 0, key: "$Field1" }}, 
    { $group: { '_id': '$key', count: { $sum: 1 }}} 
  ])

我知道这一段时间,但我得问......

由于

1 个答案:

答案 0 :(得分:3)

技术答案肯定是否定的。它不受支持。

与计算聚合结果相比,向服务器发出请求的开销相形见绌,因此将两个请求作为数组发送几乎没有什么好处。对于许多驱动程序,您可以发送两个单独的请求,甚至异步地给出相似但不是更好的结果(如果可以分配负载)。

虽然您可以在一个管道中执行多个计算,但您可能希望避免可能不相关的聚合计算,可能需要更高的CPU和IO成本,而且许多管道不能很好地对齐以将它们合并为一个

例如,第一个管道运算符是选择了非常不同的文档子集的$match语句,合并它们是不切实际的(通常建议尝试使用索引过滤尽可能多的文档)管道的第一步)。