我有以下 BSON :
[
{
arr: [
{
age: 24
},
{
age: 55
}
]
},
{
arr: [
{
age: 12
},
{
age: 14
},
{
age: 17
}
]
},
{
arr: [
{
age: 11
},
{
age: 13
},
{
age: 20
}
]
}
]
我使用以下查询:
db.collection.find({
"arr": {
$elemMatch: {
age: {
$lt: 15
}
}
}
},
{
"arr.$": 1
})
结果是:
[
{
"_id": ObjectId("5a934e000102030405000001"),
"arr": [
{
"age": 12
}
]
},
{
"_id": ObjectId("5a934e000102030405000002"),
"arr": [
{
"age": 11
}
]
}
]
我的挑战是,如果每个 arr 数组中的所有元素都小于 15,则返回它们,而不是当其中一个元素小于 15 时返回。因此,在这种情况下,我的期望答案是一个空数组,因为输出并非全部每个数组的元素的年龄值都在 15 岁以下。 我不确定在这种情况下是否需要使用 $elemMatch。如果有其他方法可以做到这一点,请告诉我。我只想将解决方案作为查询结果而不是在后处理中进行 JavaScript 操作。 顺便说一下,我使用
https://mongoplayground.net/
检查数据集。
我想你想要:
db.collection.find(
{"arr.age": {$not: {$gt: threshold}}},
{arr: {$first: "$arr"}}
)