Spring Boot Data中按嵌套Map的Key查询MongoDB集合
按嵌套Map的Key查询MongoDB文档
针对你要查询obj中包含指定Key的需求,有两种实用方案:
方案1:使用$exists操作符(最简单直接)
如果已知要查询的具体Key(比如"A"),直接用点语法结合$exists判断该字段是否存在即可,不管字段值是什么:
db.your_collection_name.find({"obj.A": {$exists: true}})
这个语句会返回所有obj中包含"A"这个Key的文档,完全匹配你的示例场景。
方案2:聚合管道(适合动态Key或复杂场景)
如果你的Key是动态生成的,或者需要更灵活的判断逻辑,可以用聚合管道处理:
- 先用
$objectToArray把obj转换成键值对数组(每个元素结构为{k: "Key名称", v: "对应值"}) - 再用
$match匹配数组中包含指定Key的文档 - 最后移除临时生成的数组字段(可选)
示例代码:
db.your_collection_name.aggregate([ { $addFields: { tempObjKeys: { $objectToArray: "$obj" } } }, { $match: { "tempObjKeys.k": "A" } }, { $project: { tempObjKeys: 0 // 移除临时字段,不影响原文档结构 } } ])
你之前尝试的{"obj.?": ?}写法不符合MongoDB的查询语法,所以无法生效,改用上面的两种方法就能解决问题。
内容的提问来源于stack exchange,提问作者evegul
相关产品推荐
相关产品推荐

