У меня есть коллекция MongoDB с большим количеством документов в формате последующей:Уплотненный агрегат трубопровода для MongoDB
{
"_id": {
"$oid": "581f9eae05711c35f461d779"
},
"eventID": "Illinois84bc00edc91c24a95573",
"type": "voteup",
"update": "f3a44be56669e01cf02ed685c97451ba",
"count": 1,
}
Мне нужно, чтобы иметь возможность запускать агрегат с моего сервера по сбору и возвращает объект JSON, который :
Группы данных eventID (есть много идентификаторов событий), а затем группирует документы в этих группах путем обновления (имеется много обновлений, каждый из которых связан с идентификатором события), а затем для каждой группы событий/группы обновлений суммирует ' count "каждого из документов, которые имеют тип« голосование »и« проголосовали ».
Так фактический выход может выглядеть следующим образом:
{
"events": [
// array of objects, one for each unique eventID
{
"eventID": "Idaho4532543trt3424f",
"updates": [
// array of objects, one for each unique update
{
"update": "rh43782ty738tywuioty34",
"voteup": 12, // the number of documents with that eventID/update which are type "voteup"
"votedown": 1 // the number of documents with that eventID/update which are type "voteudown"
},
{
"update": "hfu89h834hw8uoglthyw78",
"voteup": 2,
"votedown": 32
},
{
"update": "as09g8fgdsiuhgofhdosug",
"voteup": 123,
"votedown": 5
}
]
},
// here's another event...
{
"eventID": "Texas38tr943uytwo9grs",
"updates": [
{
"update": "2ty738tywuioty34rh4378",
"voteup": 0,
"votedown": 1
},
{
"update": "34hw8uoglthyw78hfu89hv",
"voteup": 22,
"votedown": 72
},
{
"update": "dsiuhgofhdosugas09g8fg",
"voteup": 67,
"votedown": 11
}
]
}
]
}
Следующая делает работу подсчета, сколько документов с кодом события/обновление/типа:
{
$group: {
_id: { eventID: "$eventName", updateID: "$update", sentiment: "$type" }
}
},
Но выход просто плоский массив каждого. Есть ли способ, чтобы агрегат производил вложенный объект, такой как выше?
Одна крошечная ошибка в там; во второй группе $ id.eventID должен быть $ _id.eventID. – Squidinker
... но ваше решение * точно *, что я был после. Спасибо! – Squidinker