У меня есть довольно сложная модель документа, который структурно так:MongoDB Aggregation с очень сложными документами
{
_id: 1,
"title": "I'm number one",
... (many other meta data text fields not desired in the summary)
"foo": {
"tom": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"dick": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"harry": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
... (Total of 14 fields in foo)
},
"bar": {
"joe": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"fred": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"bob": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
... (Total of 14 fields in bar)
},
"dodads": [
{
"contraption": 0,
"doohickey": 0,
"gewgaw": 0,
"gizmo": 0,
... (total of 15 elements in each doodad object)
},
{
"contraption": 0,
"doohickey": 0,
"gewgaw": 0,
"gizmo": 0,
...
},
... (total of 6 objects in dodads object array)
]
},
... (a couple hundred documents in total)
Что я ищу это список всех объектов/массивов, которые имеют числовые данные. Я хотел бы, чтобы результат был документом в исходном формате, который содержит числовые поля, суммированные. Пока, скажем, все документы имеют одинаковую структуру.
В результате агрегации будет иметь следующего
{
"foo": {
"tom": [35, 65, 13, 22, 36, 58, 93, 43, 56, 44, 23, 72],
"dick": [56, 87, 28, 49, 34, 22, 48, 86, 29, 23, 88, 29],
... (All 14 fields in foo)
},
"bar": {
"joe": [87, 28, 49, 34, 22, 48, 86, 29, 23, 88, 29, 47],
"fred": [13, 22, 36, 58, 93, 43, 56, 44, 23, 72, 35, 65],
... (All 14 fields in bar)
},
"dodads": [
{
"contraption": 45,
"doohickey": 88,
"gewgaw": 23,
"gizmo": 64,
... (All 15 elements in each doodad object)
},
{
"contraption": 12,
"doohickey": 73,
"gewgaw": 57,
"gizmo": 86,
...
},
... (All 6 objects in dodads object array)
]
}
Я считаю, что я могу расслабиться массивами, указать суммы и прогнозы и получить именно то, что я хочу с обширным и многословным трубопроводом агрегации. Я мог бы также выполнять несколько запросов, захватывая компоненты (один из них просто foo, второй - просто бар ...).
Что мне интересно, есть ли сокращенный способ определения суммирования? Например, могу ли я сказать, что мне нужна сводка foo
или foo.tom
и вернуться к их содержанию?
Можете ли вы уточнить, что вы подразумеваете под «обобщать» ? Вы запрашиваете только числовые поля и никакие другие поля на выходе –
@NeilLunn Да сводка всех объектов/массивов, которые имеют числовые данные. Я добавил образец вывода, чтобы, надеюсь, уточнить результат, который я ищу. – Jim