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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:55:09