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

如何查询嵌套数组结构MongoDB文档中SID=100的所有元素

MongoDB多层嵌套数组查询SID=100元素方案

文档结构说明

你给出的示例存在JSON语法问题(US未加引号、多余逗号),合法的存储结构参考如下:

{
  "_id": "123456",
  "Continent": {
    "Country": [
      [
        "US",
        {
          "State": [
            [
              100,
              {
                "Product": "Corn",
                "SID": 100
              }
            ],
            [
              200,
              {
                "Product": "Maze",
                "SID": 200
              }
            ]
          ]
        }
      ]
    ]
  }
}

该结构存在两层二维嵌套数组:Continent.Country是二维数组,其内部子数组的第二个元素携带State字段;State同样是二维数组,子数组第二个元素存储带SID属性的业务对象。

方案1:匹配包含目标元素的文档

如果只需要筛选出存在SID=100元素的文档,不需要剔除无关嵌套内容,可以直接用多层$elemMatch做嵌套查询:

db.你的集合名称.find({
  "Continent.Country": {
    $elemMatch: {
      $elemMatch: {
        "State": {
          $elemMatch: {
            $elemMatch: {
              "SID": 100
            }
          }
        }
      }
    }
  }
})

该语句会返回整个匹配的文档,不会过滤数组中SID不等于100的其他元素。

方案2:精准提取所有SID=100的元素

如果需要只返回符合条件的SID元素,剔除所有无关嵌套内容,必须用聚合管道,通过逐层展开数组+过滤的方式实现,兼容性覆盖MongoDB 3.2及以上版本:

db.你的集合名称.aggregate([
  // 逐层展开第一层二维数组Country
  { $unwind: "$Continent.Country" },
  { $unwind: "$Continent.Country" },
  // 过滤掉Country子数组里的非对象元素(比如示例里的"US"字符串)
  { $match: { "Continent.Country.State": { $exists: true } } },
  // 逐层展开第二层二维数组State
  { $unwind: "$Continent.Country.State" },
  { $unwind: "$Continent.Country.State" },
  // 过滤出SID=100的目标元素
  { $match: { "Continent.Country.State.SID": 100 } },
  // 可选:自定义返回字段,这里直接返回匹配到的业务对象
  {
    $project: {
      _id: 0,
      targetProduct: "$Continent.Country.State"
    }
  }
])

针对给出的示例文档,该语句返回结果如下:

{
  "targetProduct": {
    "Product": "Corn",
    "SID": 100
  }
}

注意事项

  • 存储文档时请严格遵守JSON语法,字符串类型值必须加双引号,避免出现语法解析错误。
  • 如果后续嵌套数组层级增加,只需要对应增加$unwind展开步骤即可,逻辑保持一致。
  • 不推荐用$where写JS函数遍历,性能远低于聚合管道的原生查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:33:16