我有以下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?
find
arr
因此,我的预期输出:
[ { "test": 1, "arr": [ { age: 24, name: "a" } { age: 12, name: "c" }, { age: 14, name: "d" } ] } ]
如果有可能用一个发现来压平数组,那也太好了。
您可以使用 $filter 运算符来过滤投影中阵列中的元素。
$filter
db.collection.find({ "arr.age": { $lt: 30 } }, { "test": 1, "arr": { $filter: { input: "$arr", cond: { $lt: [ "$$this.age", 30 ] } } } })
Demo @ Mongo Playground