Найти проценты в монго - PullRequest
       1

Найти проценты в монго

0 голосов
/ 29 февраля 2020

У меня есть коллекция с 2 документами, как показано ниже.

{
_id:1,
Score: 30,
Class:A,
School:X
}
{
Score:40,
Class:A,
School:Y
}

Мне нужна помощь в написании запроса, чтобы узнать процентное соотношение очков, как показано ниже

{
School:X,
Percent:30/70
}
{
School:Y
Percent:40/70
}

1 Ответ

1 голос
/ 29 февраля 2020

Этот вход:

var r =
[
 {"school":"X", "class":"A", "score": 30}
 ,{"school":"Y", "class":"A", "score": 40}
 ,{"school":"Z", "class":"A", "score": 20}
 ,{"school":"Y", "class":"B", "score": 50}
 ,{"school":"Z", "class":"B", "score": 17}
         ];

проходит через этот конвейер:

db.foo.aggregate([

// Use $group to gather up the class and save the inputs via $push                                           
{$group: {_id: "$class", tot: {$sum: "$score"}, items: {$push: {score:"$score",school:"$school"}}} }

// Now we have total by class, so just "reproject" that array and do some nice                               
// formatting as requested:                                                                                  
,{$project: {
        items: {$map: {  // overwrite input array $items; this is OK                                         
            input: "$items",
            as: "z",
            in: {
                    school: "$$z.school",
                    pct: {$concat: [ {$toString: "$$z.score"}, "/", {$toString:"$tot"} ]}
                }
            }}
    }}

]);

производит этот вывод, где _id является Class:

{
        "_id" : "A",
        "items" : [
                {"school" : "X",   "pct" : "30/90"},
                {"school" : "Y",   "pct" : "40/90"},
                {"school" : "Z",   "pct" : "20/90"}
                ]
}
{
        "_id" : "B",
        {"school" : "Y",   "pct" : "50/67"},
        {"school" : "Z",   "pct" : "17/67"}
        ]
}

Отсюда вы можете $unwind, если вы будете sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...