MongoDB如何查询数组内嵌对象中的数组是否包含指定值
你可以直接使用MongoDB的嵌套数组查询语法实现需求,两种常用写法如下:
基础查询写法(推荐新手使用)
假设你的集合名为players,需要查询的年份为2021,对应语句:
db.players.find({ "teams": { $elemMatch: { "years": 2021 } } })
如果要查询其他年份,直接把代码里的2021替换成目标年份即可,比如查询2006年就改成years: 2006。
简化写法(效果完全一致)
MongoDB针对单条件的嵌套数组查询提供了语法糖,也可以直接这么写:
db.players.find({ "teams.years": 2021 })
原理解释
- 两种写法都会自动遍历
teams数组下的所有对象,只要任意一个对象的years数组包含目标年份,就会返回整条文档,刚好匹配你的需求 - 如果后续需要增加额外过滤条件,比如同时要求球员在指定年份效力的队伍为
MIN,就必须用$elemMatch同时匹配多个条件,示例如下:
// 查找2021年在MIN队效力的球员 db.players.find({ "teams": { $elemMatch: { "name": "MIN", "years": 2021 } } })
内容的提问来源于stack exchange,提问作者laneherby
相关产品推荐
相关产品推荐

