如何聚合、过滤嵌套数组和投影选定的嵌套字段?
我有以下数据:
{
"teacher": "Ben",
"students": [
{
"name": "Liz",
"age": 8,
"pets": 1
},
{
"name": "Jon",
"age": 9,
"pets": 3
},
{
"name": "Eva",
"age": 9,
"pets": 2
}
]
}
..并且想要查询以获得此结果:
{
"teacher": "Ben",
"students": [
{
"name": "Jon",
"pets": 3
},
{
"name": "Eva",
"pets": 2
}
]
}
我可以按某个年龄进行过滤,但如何仅返回嵌套学生数据中的
name
和 pets
字段?尝试以我能想到的所有方式来投影这些领域,但没有运气,所以我猜我可能找错了地方。
db.classes.aggregate([
{ "$match": {} },
{ "$project": {
"_id": 0,
"teacher": 1
"students": {
"$filter": {
input: "$students",
cond: {
"$eq": [ "$$this.age", 9 ],
}
}
}
}}
])