我有以下 BSON 数据:
[
{
"test": 1,
"arr": [
{
age: 24,
name: "a"
},
{
age: 55,
name: "b"
},
{
age: 12,
name: "c"
},
{
age: 14,
name: "d"
},
{
age: 67,
name: "e"
}
]
}
]
是否可以仅使用
find
方法来获取 arr
数组中每个数组元素小于 30 的“age”字段?
所以我的预期输出:
[
{
"test": 1,
"arr": [
{
age: 24,
name: "a"
}
{
age: 12,
name: "c"
},
{
age: 14,
name: "d"
}
]
}
]
如果能够通过一个发现来压平数组,那就太好了。
$filter
运算符来过滤投影中数组中的元素。
db.collection.find({
"arr.age": {
$lt: 30
}
},
{
"test": 1,
"arr": {
$filter: {
input: "$arr",
cond: {
$lt: [
"$$this.age",
30
]
}
}
}
})