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

Mongo查询匹配数组子文档后如何正确返回匹配城市文档的_id

问题原因

  • 常规Mongo find查询的投影规则默认返回数组内所有元素,你使用的{"Cities._id":1}规则只会返回整个Cities数组中所有城市的_id,不会仅筛选出匹配CityName=Denver的单个城市的_id
  • 根文档的_id字段默认开启返回,未主动关闭的情况下会优先展示该字段,和你需要的城市_id混淆

解决方案

方法1:使用$elemMatch投影(适配所有主流Mongo版本,操作最简单)

查询条件保持原有规则{"Cities.CityName":"Denver"}不变,将投影规则修改为如下内容即可:

{
  "_id": 0,
  "Cities": {
    "$elemMatch": {
      "CityName": "Denver"
    }
  },
  "Cities._id": 1
}

返回结果将仅包含匹配到的Denver对应的城市_id字段。

方法2:使用聚合管道(适合更复杂的筛选场景)

如果后续需要扩展多条件筛选逻辑,可以在Mongo Compass的聚合标签页构建如下管道步骤:

  1. 第一步$match:过滤出包含Denver城市的州文档
{"Cities.CityName": "Denver"}
  1. 第二步$unwind:展开Cities数组,将每个城市拆分为独立文档
{"path": "$Cities"}
  1. 第三步$match:过滤出仅对应Denver的子文档
{"Cities.CityName": "Denver"}
  1. 第四步$project:自定义返回字段,仅输出需要的城市_id
{
  "_id": 0,
  "targetCityId": "$Cities._id"
}

最终返回的targetCityId就是你需要的Denver对应的文档_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:48:02