#node.js #mongodb #mongodb-query #aggregation-framework #mongodb-nodejs-driver
Вопрос:
Я пытаюсь использовать функцию агрегации MongoDB с очень простым запросом, но по какой-то причине не могу получить конечный результат, который я ищу.
Мне нужно было получить группировку и итоговые статусы записей в моей коллекции. Запись может иметь статус (JITM025) 1-Пройдено, 2-Предупреждения или 3-Ошибки. А затем я хочу, чтобы общее число было суммировано. Группировка основана на уникальных идентификаторах групп (JITM002). Мне каким — то образом удалось разработать группировку и сортировку, но я ни за что на свете не могу получить итоговые данные по группам для каждого идентификатора группы-вместо этого я получаю итоговые данные по всем строкам в каждой группе.
Вот совокупный конвейер, который я смог выяснить до сих пор (не уверен, что он на 100% верен):
[
{
"$facet": {
"id": [{ "$group": { "_id": "$JITM002" }} ],
"passed": [{ "$match": { "JITM025": 1 }}, { "$count": "total" }],
"warnings": [{ "$match": { "JITM025": 2 }}, { "$count": "total" }],
"errors": [{ "$match": { "JITM025": 3 }}, { "$count": "total" }],
"total": [{ "$match": { "JITM025": { "$gt": 0 }}}, { "$count": "all" }]
}
},
{
"$unwind": "$id"
},
{
"$sort": { "id": 1 }
},
{
"$project": {
"id": { "$ifNull": [{ "$arrayElemAt": [ "$id:id", 0 ]}, "$id._id" ]},
"passed": { "$ifNull": [{ "$arrayElemAt": [ "$passed.total", 0 ]}, 0 ]},
"warnings": { "$ifNull": [{ "$arrayElemAt": [ "$warnings.total", 0 ]}, 0 ]},
"errors": { "$ifNull": [{ "$arrayElemAt": [ "$errors.total", 0 ]}, 0 ]},
"total": { "$ifNull": [{ "$arrayElemAt": [ "$total.all", 0 ]}, 0 ]}
}
}
]
Вот результаты, которые я в настоящее время получаю в консоли Aggregate в MongoDB Compass:
Я получаю правильные результаты по 2 группам, отсортированным по идентификатору группы (750 и 751). Проблема в том, что итоговые данные не отображаются для каждой группы — это общая сумма для всех строк, суммированных вместе. Мне нужно, чтобы итоговые данные относились к их собственному идентификатору группы.
Комментарии:
1. Ваш запрос выполняется нормально, без каких-либо ошибок. Можете ли вы сказать, как и где вы выполняете запрос?
2. Вот несколько примеров запроса агрегации драйверов MongoDB NodeJS — в документации MongoDB.
3. @prasad_, сэр, я обновил свой вопрос теперь, когда добился некоторого прогресса. Можете ли вы помочь мне решить последнюю проблему, с которой я столкнулся, относительно того, как правильно подводить итоги на основе группировок. Я потратил часы, пытаясь понять это, но безрезультатно. Любая помощь будет очень признательна. Спасибо!