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
相关产品推荐
相关产品推荐

