Как использовать размотку дважды? в том же запросе?
я есть база данных, структурированная так:
{
"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"
}
]
}
Мне нужно вернуть только массив Hospitais, который соответствует входу «Hospitais.nome», а также, внутри каждого массива Hospitais есть массив «utis», я тоже хочу отфильтровать его,ниже приведен «Ожидаемый результат».
Я пробовал это разными способами, и самый последний, который я пробовал - это код:
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']}]}
}
}
}
}
]
);
Насколько я понял, фильтр агрегации должен показывать только объекты массива Hospitais, где Hospital.nome - «Дорио Силва», и объект Hospital.utis, где Hospital.utis.nome - «UTI1».
Что я ожидал:
[
{
"utis" : [
{
"_id" : NumberInt("893910"),
"nome" : "UTI1",
"leitos" : [
{
"_id" : NumberInt("128938120"),
"_paciente" : "Oliver"
},
{
"_id" : NumberLong("12803918239"),
"_paciente" : "Priscilla"
}
]
}
],
"nome" : "Dorio Silva"
}
]
Но это никогда не результат, я могу опубликовать результаты, если их спросят, но я не думаю, что это может быть необходимо.Как правильно запросить мой результат? Что-то не так с тем, как я строю свою базу данных? Это могло быть сделано лучше?