Como posso agregar, filtrar array aninhado e projetar campos aninhados selecionados?
Eu tenho os seguintes dados:
{
"teacher": "Ben",
"students": [
{
"name": "Liz",
"age": 8,
"pets": 1
},
{
"name": "Jon",
"age": 9,
"pets": 3
},
{
"name": "Eva",
"age": 9,
"pets": 2
}
]
}
..e deseja consultar para obter este resultado:
{
"teacher": "Ben",
"students": [
{
"name": "Jon",
"pets": 3
},
{
"name": "Eva",
"pets": 2
}
]
}
Posso filtrar por alguma idade, mas como posso retornar apenas os campos name
e pets
nos dados aninhados dos alunos? Tentei projetar esses campos de todas as maneiras que pude imaginar, sem sorte, então provavelmente estou procurando no lugar errado, eu acho.
db.classes.aggregate([
{ "$match": {} },
{ "$project": {
"_id": 0,
"teacher": 1,
"students": {
"$filter": {
input: "$students",
cond: {
"$eq": [ "$$this.age", 9 ],
}
}
}
}}
])
você poderia adicionar um
$project
estágioou você pode usar o
$unset
palco para remover campos que não desejaParque infantil
acho que ficaria ainda mais limpo com um
$addFields
seguido de um$unset
Parque infantil