我对mongo Query进行了整合,这给了我这样的结果
[
{
tokens : 129,
avgwaitingTime : 5,
service: 'xx'
},
{
tokens : 9,
avgwaitingTime : 1,
service: "yy"
}
]
我需要做的是通过添加一行包含令牌总数的行来追加结果,像这样使用聚合来计算所有avgwaitingTime的平均值。
[
{
tokens : 129,
avgwaitingTime : 5,
service: 'xx'
},
{
tokens : 9,
avgwaitingTime : 1,
service: "yy"
},
{
tokens : 138, // sum of all tokens
avgwaitingTime : 3 // avg of avgwaitingTime (6+1)/2
service : ''
}
]
我汇总的最后一部分是$ project
[
..//////
..//////
$project:{
tokens: '$tokens',
service: '$service',
avgwaitingTime: '$avgwaitingTime'
}
]
答案 0 :(得分:1)
您可以使用以下汇总
基本上,您希望两个($project
+ $group
)的结果在此处具有相同的pipline。因此,您需要将pipeline
进一步分为两部分,这就是$facet
所提供的。
db.collection.aggregate([
{ "$facet": {
"lastPart": [
{ "$project": {
"tokens": "$tokens",
"service": "$service",
"avgwaitingTime": "$avgwaitingTime"
}}
],
"total": [
{ "$group": {
"_id": null,
"tokens": { "$sum": "$tokens" },
"avgwaitingTime": { "$sum": "$avgwaitingTime" }
}}
]
}},
{ "$project": {
"data": {
"$concatArrays": ["$total", "$lastPart"]
}
}},
{ "$unwind": "$data" },
{ "$replaceRoot": { "newRoot": "$data" }}
])