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

MongoDB如何在未知嵌套键的数组中查找指定ID

解决MongoDB嵌套对象任意子键数组的查询问题

问题说明

需要在不知道嵌套对象active子键名称的情况下,查询其任意子键对应的数组中包含特定ID"AA"的文档。MongoDB不支持直接使用active.*这类通配符语法进行此类查询,以下是可行的解决方案。

可行查询方法

方法一:使用$expr结合数组操作符直接查询

通过$objectToArray将active对象转换为键值对数组,再利用$map遍历每个子键对应的数组,最后通过$anyElementTrue判断是否存在包含目标值的子数组:

db.col.find({
  $expr: {
    $anyElementTrue: {
      $map: {
        input: { $objectToArray: "$active" },
        as: "item",
        in: { $in: ["AA", "$$item.v"] }
      }
    }
  }
}, { _id: 1 })

方法二:使用聚合管道查询

适合需要后续数据处理的复杂场景,先转换对象结构再匹配目标值:

db.col.aggregate([
  { $addFields: { activeKV: { $objectToArray: "$active" } } },
  { $match: { "activeKV.v": "AA" } },
  { $project: { _id: 1 } }
])

结果验证

以上两种方法均会返回预期结果:

[ { _id: "1" }, { _id: "2" } ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:24:57