MongoDB如何根据数组任意元素的条件查询文档?
MongoDB数组元素条件查询:筛选grades数组含score在10-50之间的文档
基础解决方案
要筛选出grades数组中存在任意一个元素的score值大于10且小于50的文档,MongoDB提供了简洁的查询方式,直接针对数组子字段设置条件即可:
db.collection.find({ "grades.score": { $gt: 10, $lt: 50 } })
原理说明
当针对grades.score设置范围条件时,MongoDB会自动遍历数组中的每个元素,只要数组里至少有一个元素满足score > 10且score < 50,整个文档就会被匹配返回,无需考虑数组的元素数量。
以你提供的示例文档为例,其中第二个grades元素的score为23,符合条件,因此该文档会被此查询返回。
扩展:多字段条件匹配
如果需要数组中存在某个元素同时满足多个字段条件(比如score在10-50之间且grade为"B"),可以使用$elemMatch操作符确保条件作用于同一个数组元素:
db.collection.find({ "grades": { $elemMatch: { score: { $gt: 10, $lt: 50 }, grade: "B" } } })
这个查询只会返回grades数组中存在单个元素同时满足score范围和grade值的文档。
内容的提问来源于stack exchange,提问作者Contra111
相关产品推荐
相关产品推荐

