如何聚合、过滤嵌套数组和投影选定的嵌套字段?
我有以下数据:
{
"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 ],
}
}
}
}}
])
你可以添加一个
$project
舞台或者您可以使用
$unset
舞台删除您不需要的字段操场
$addFields
我认为后面加上一个会更干净$unset
操场