Рассчитать процент в mongodb - PullRequest
       10

Рассчитать процент в mongodb

0 голосов
/ 26 сентября 2018

Моя база данных выглядит так:

{
  {user:bob,votes:63}
  {user:jack,votes:27}
  {user:john,votes:10}
}

Я могу получить общее количество голосов, но я не могу понять, как заставить каждого человека голосовать в процентах от общего числа.Например;Джек получил бы 27% голосов.

[ 
  {
    '$group': { 
                '_id': '',
                'totalofvotes': {'$sum': '$votes'},
                '%votesperperson': {'$multiply':[{'$divide':["votes",{'$sum': '$votes'}]},100]}                   
              },
  }
]

1 Ответ

0 голосов
/ 26 сентября 2018

вы не можете сделать это на одном групповом этапе, так как группа должна быть прекращена для получения значения суммы.Вместо этого используйте следующий запрос:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...