MongoDB Shell Как я могу усреднить или $ min / $ max сумму строк - PullRequest
0 голосов
/ 08 января 2020

Я уже некоторое время пытаюсь разобраться с агрегацией, и я не могу понять, как найти среднее, минимальное или максимальное, суммы строк.

    db.mycollectionname.aggregate([
    {$unwind: "$Monitor"},
        {$group: {_id: "$Monitor.Mon Type",
        "Total": {$sum: 1}
        }
    }
])

Я знаю, что это не так много, но это то, как далеко мне удалось пройти, это выкачивает это;

{ "_id" : "RM", "Total" : 21 }
{ "_id" : "PT", "Total" : 43 }
{ "_id" : "IM", "Total" : 24 }
{ "_id" : "IO", "Total" : 72 }

То, что я пытаюсь сделать, это получить минимум / максимум этих суммированных результатов и среднее из всех результатов. Любая помощь или совет ценится, не могу найти ничего, что поможет мне. Спасибо

1 Ответ

0 голосов
/ 08 января 2020

Добавьте этот этап как последний этап:

{$group :{_id:'', minimum :{$min: '$Total'}, maximum :{$max: '$Total'}, Total :{$sum : '$Total'}, average :{$avg : '$Total'}}}

Итак, ваш запрос:

db.mycollectionname.aggregate([
    { $unwind: "$Monitor" },
    {
        $group: {
            _id: "$Monitor.Mon Type",
            "Total": { $sum: 1 }
        }
    },
    {
        $group: {
            _id: '', minimum: { $min: '$Total' }, maximum: { $max: '$Total' },
            Total: { $sum: '$Total' }, average: { $avg: '$Total' }
        }
    }
])

Поэтому, когда вы делаете _id: '' или _id: null, групповой этап будет повторяться все документы на тот момент. После добавления окончательного $group результата этапа должно быть:

/* 1 */
{
    "_id" : "",
    "minimum" : 21.0,
    "maximum" : 72.0,
    "Total" : 160.0,
    "average" : 40.0
}
...