You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB中通过匹配嵌套数组内的指定值查询对应文档

问题原因分析

你的查询存在两处明显错误,导致没有返回结果:

  • 嵌套字段查询语法错误:你写的{teams:{MIN: {$elemMatch: 2021}}}的语义是匹配整个teams字段完全等于{MIN: {$elemMatch: 2021}}对象的文档,不是查询teams下的MIN字段。查询嵌套对象的子字段需要用点号语法,引用为"teams.MIN"。
  • $elemMatch使用场景错误:$elemMatch仅用于数组元素为对象、需要同时匹配对象的多个字段的场景。你这里teams.MIN对应的数组元素是纯数字,判断数组是否包含某个指定值不需要用$elemMatch。
正确查询写法

MongoDB针对数组的等值查询天然支持「数组包含指定值」的匹配逻辑,直接写字段等于目标值即可:

示例1:查询2016年效力于MIN队的球员

db.Players.find({
  "teams.MIN": 2016
})

该查询会返回Jose Berrios、Joe Mauer两条文档,和你的预期一致。

示例2:查询MIN队效力记录包含2020年的球员

db.Players.find({
  "teams.MIN": 2020
})

该查询会返回Nelson Cruz、Jose Berrios两条文档,符合要求。

扩展:多球队多条件查询

如果需要查询2021年同时效力过MIN和TBR的球员,写法如下:

db.Players.find({
  "teams.MIN": 2021,
  "teams.TBR": 2021
})

内容的提问来源于stack exchange,提问作者laneherby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:09:03