$ filter hasta 2 niveles anidados en mongodb
tengo una base de datos estructurada como esta:
{
"Hospitais": [
{
"utis": [
{
"_id": 893910,
"nome": "UTI1",
"leitos": [
{
"_id": 128938120,
"_paciente": "Oliver"
},
{
"_id": 12803918239,
"_paciente": "Priscilla"
}
]
},
{
"_id": 38471839,
"nome": "UTI2",
"leitos": [
{
"_id": 48102938109,
"_paciente": "Serveró"
},
{
"_id": 501293890,
"_paciente": "Thales"
}
]
},
{
"_id": 58109238190,
"nome": "UTI3",
"leitos": [
{
"_id": 93801293890,
"_paciente": "Lucia"
},
{
"_id": 571029390,
"_paciente": "Amanda"
}
]
}
],
"nome": "Dorio Silva"
},
{
"utis": [
{
"_id": 410923810,
"nome": "UTI1",
"leitos": [
{
"_id": 48102938190,
"_paciente": "Neymar"
},
{
"_id": 48102938190,
"_paciente": "Thiago"
}
]
},
{
"_id": 41092381029,
"nome": "UTI2",
"leitos": [
{
"_id": 10293182309,
"_paciente": "Brazza"
},
{
"_id": 38190238,
"_paciente": "Pelé"
}
]
},
{
"_id": 83102938109,
"nome": "UTI3",
"leitos": [
{
"_id": 810923810,
"_paciente": "Aparecida"
},
{
"_id": 20938904209,
"_paciente": "Pimentinha"
}
]
}
],
"nome": "Apart Hospital"
}
]
}
Necesito devolver solo el conjunto de Hospitais que coinciden con una entrada de 'Hospitais.nome' y además, hay un conjunto dentro de cada conjunto de Hospitais llamado 'utis', quiero filtrarlo también juntos,hay un "Resultado esperado" a continuación.
He intentado esto de muchas maneras diferentes y la más reciente que he estado intentando es este código:
db.collection.aggregate(
[
{ "$match": { "Hospitais.nome": 'Dorio Silva'} },
{
"$project": {
_id: 0,
Hospitais: {
$filter: {
input: "$Hospitais",
as: "hospital",
cond: { $and: [{$eq: ["$$hospital.nome", 'Dorio Silva']},{ $eq: ["$$hospital.utis.nome",'UTI1']}]}
}
}
}
}
]
);
Por lo que he entendido sobre el filtro de agregación, solo debería mostrar los objetos de la matriz Hospitais donde Hospital.nome es 'Dorio Silva' y el objeto de Hospital.utis donde Hospital.utis.nome es 'UTI1'
Lo que esperaba:
[
{
"utis" : [
{
"_id" : NumberInt("893910"),
"nome" : "UTI1",
"leitos" : [
{
"_id" : NumberInt("128938120"),
"_paciente" : "Oliver"
},
{
"_id" : NumberLong("12803918239"),
"_paciente" : "Priscilla"
}
]
}
],
"nome" : "Dorio Silva"
}
]
Pero ese nunca es el resultado, puedo publicar los resultados si me lo piden, pero no creo que sea necesario. @ ¿Cuál es la forma correcta de consultar mi resultado? ¿Hay algún problema con la forma en que estoy construyendo mi base de datos? ¿Podría hacerse mejor?