У меня есть коллекция, где образец документа имеет следующую форму:
{
"document_1": {
"field_1": {},
"array_1": {
"subobject_1": {
"subobject_field_1": "true",
"subobject_field_2": {},
"subobject_field_3": {}
},
"subobject_2": {
"subobject_field_1": "false",
"subobject_field_2": {},
"subobject_field_3": {}
}
}
}
}
Количество подобъектов ( array_1
) в array_1
варьируется и не одинаково для всех документов. Я пытаюсь сделать запрос, который для каждого документа подсчитывает количество подобъектов, где subobject_field_1
имеет значение true
. Я также хочу иметь возможность точно указать, какие поля возвращать, и установить дополнительные условия (в этом случае дополнительным условием будет то, что field_1 = "A"
). В этом случае вывод будет выглядеть так:
{
"document_1": {
"field_1": "A",
"array_1": 1
}
}
Я попробовал приведенный ниже код, но он дает мне только количество подобъектов, независимо от того, является ли subobject_field_1
true
или false
.
db.getCollection('myCollection').aggregate([
{
$match: {field_1: 'A'}
},
{
$project: {field_1: 1, array_1: {$size: $array_1}}
}
])
Заранее спасибо!
Всего 1 ответ
Вы можете использовать ниже агрегации
db.collection.aggregate([
{ "$match": { "field_1": "A" }},
{ "$addFields": {
"field_2": {
"$size": {
"$filter": {
"input": { "$objectToArray": "$field_2" },
"cond": { "$eq": ["$$this.v.subdoc_field_1", "true"] }
}
}
}
}}
])