Допустим, у меня есть следующая структура документа:
{
"_id": "ID",
"array": [
{
"a": "A",
"b": "B",
"c": {
"x": true,
"y": true,
"z": false
}
},
{
"a": "A",
"b": "B"
},
{
"a": "A",
"b": "B"
"c": {
"s": true
}
}
]
}
Я пытаюсь выполнить агрегацию, которая дает мне такой тип вывода:
{
"_id": "ID",
"array": [
{
"a": "A",
"b": "B",
"c": 2
},
{
"a": "A",
"b": "B",
"c": 0
},
{
"a": "A",
"b": "B"
"c": 1
}
]
}
Итак, что я хочу do вместо документа c
возвращает количество элементов со значением true
. И, как в примере, поле c
не обязательно существует (в этом случае я хочу вернуть 0), а когда это происходит, его подполя не обязательно совпадают с другими подполями c
в массиве. Допустим, я делаю агрегацию:
db.collection.aggregate([
{"$match": {<conditions>}},
{"$project": {
"array.a": 1,
"array.b": 1,
"array.c": <?>,
}}
])
Как мне настроить "array.c"
в проекции для достижения sh того, что мне нужно?