不确定是否可以这样做,但我得问:
我可以在一个请求中发送多个聚合吗?换句话说,而不是做以下事情:
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 }}}
])
我知道这一段时间,但我得问......
由于
答案 0 :(得分:3)
技术答案肯定是否定的。它不受支持。
与计算聚合结果相比,向服务器发出请求的开销相形见绌,因此将两个请求作为数组发送几乎没有什么好处。对于许多驱动程序,您可以发送两个单独的请求,甚至异步地给出相似但不是更好的结果(如果可以分配负载)。
虽然您可以在一个管道中执行多个计算,但您可能希望避免可能不相关的聚合计算,可能需要更高的CPU和IO成本,而且许多管道不能很好地对齐以将它们合并为一个
例如,第一个管道运算符是选择了非常不同的文档子集的$match
语句,合并它们是不切实际的(通常建议尝试使用索引过滤尽可能多的文档)管道的第一步)。