如何在MongoDB中查询含29.11.2022的嵌套dates字段文档?
解决MongoDB查询含点嵌套键的问题
要查询所有dates嵌套字段中包含"29.11.2022"键的文档,由于键名里的点会被MongoDB默认解析为嵌套层级分隔符,直接使用常规点语法会出错,可通过以下两种方法解决:
方法一:用$exists配合引号包裹完整键路径
将包含点的键名与上层嵌套字段组合成完整路径,并用双引号包裹,MongoDB会将其识别为单个键名而非嵌套路径。示例查询语句:
db.collection.find({ "dates.29.11.2022": { $exists: true } })
$exists: true用于判断该键是否存在于dates对象中。
方法二:用$expr结合$objectToArray转换查询
将dates对象转换为键值对数组后,筛选目标键是否存在,适合更复杂的动态键场景:
db.collection.find({ $expr: { $ne: [ $filter({ input: { $objectToArray: "$dates" }, cond: { $eq: ["$$this.k", "29.11.2022"] } }), [] ] } })
$objectToArray把dates转为[{k: "键名", v: "值"}, ...]格式的数组$filter筛选出键名等于"29.11.2022"的元素$ne判断筛选结果不为空数组,即存在目标键
内容的提问来源于stack exchange,提问作者Dark
相关产品推荐
相关产品推荐

