вы не можете сделать это на одном групповом этапе, так как группа должна быть прекращена для получения значения суммы.Вместо этого используйте следующий запрос:
db['test'].aggregate(
[
// Stage 1
{
$group: {
_id:null,
sum:{$sum:"$votes"},
users:{$push:{user:"$user", votes:"$votes"}}
}
},
// Stage 2
{
$unwind: {
path : "$users",
}
},
// Stage 3
{
$project: {user:"$users.user",
votes:"$users.votes",
sum:"$sum",
"percent": {$multiply:[{$divide:["$users.votes","$sum"]},100]}
}
},
]
);
Будет выведено
{
"_id" : null,
"user" : "bob",
"votes" : NumberInt(63),
"sum" : NumberInt(100),
"percent" : 63.0
}
{
"_id" : null,
"user" : "jack",
"votes" : NumberInt(27),
"sum" : NumberInt(100),
"percent" : 27.0
}
{
"_id" : null,
"user" : "john",
"votes" : NumberInt(10),
"sum" : NumberInt(100),
"percent" : 10.0
}