Você precisa
$unwind
a primeira matriz, então você pode facilmente aplicar $filter
na matriz aninhada db.collection.aggregate([
{ "$unwind": "$Hospitais" },
{ "$match": { "Hospitais.nome": "Dorio Silva" } },
{ "$project": {
"Hospitais": {
"$filter": {
"input": "$Hospitais.utis",
"as": "uti",
"cond": {
"$eq": ["$$uti.nome", "UTI1"]
}
}
}
}}
])
Ou você pode tentar isso também
db.collection.aggregate([
{ "$match": { "Hospitais.nome": "Dorio Silva" } },
{ "$project": {
"Hospitais": {
"$filter": {
"input": {
"$map": {
"input": "$Hospitais",
"as": "hospital",
"in": {
"nome": "$$hospital.nome",
"utis": {
"$filter": {
"input": "$$hospital.utis",
"as": "uti",
"cond": {
"$eq": ["$$uti.nome", "UTI1"]
}
}
}
}
}
},
"as": "hospital",
"cond": {
"$eq": ["$$hospital.nome", "Dorio Silva"]
}
}
}
}}
])
Ambos darão a saída semelhante
[
{
"Hospitais": [
{
"_id": 893910,
"leitos": [
{
"_id": 1.2893812e+08,
"_paciente": "Oliver"
},
{
"_id": 1.2803918239e+10,
"_paciente": "Priscilla"
}
],
"nome": "UTI1"
}
]
}
]