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

如何在MongoDB中按日期的月日部分查询Date类型字段?

MongoDB Date类型字段匹配指定月日的查询方法

直接用正则匹配Date类型字段行不通,因为MongoDB里的Date字段存的是ISODate对象,不是字符串,正则是针对字符串的匹配逻辑,自然查不到结果。下面是几种可行的查询方式:

方法一:聚合管道提取月日匹配

利用MongoDB的日期操作符$month和$dayOfMonth,在聚合管道中提取字段的月份和日期,再进行匹配:

// 匹配所有年份中9月11日的文档
db.users.aggregate([
  {
    $match: {
      $expr: {
        $and: [
          { $eq: [{ $month: "$createdAt" }, 9] }, // 9对应09月
          { $eq: [{ $dayOfMonth: "$createdAt" }, 11] } // 11对应11日
        ]
      }
    }
  }
])

方法二:匹配多个月日组合

如果需要同时匹配比如09-11和03-22这类多个组合,可以用$in结合字符串拼接实现,注意补零处理个位数的月/日:

db.users.aggregate([
  {
    $match: {
      $expr: {
        $in: [
          {
            $concat: [
              // 月份补零到2位,比如3月转为"03"
              { $substrPad: [{ $month: "$createdAt" }, 2, "0", "left"] },
              "-",
              // 日期补零到2位,比如5日转为"05"
              { $substrPad: [{ $dayOfMonth: "$createdAt" }, 2, "0", "left"] }
            ]
          },
          ["09-11", "03-22"] // 目标月日组合
        ]
      }
    }
  }
])

不推荐的方案:转字符串存储

如果一定要用正则,只能把Date字段额外存为字符串格式(比如"2022-09-11T15:31:25.083+00:00"),然后用正则匹配,但这种方式会浪费存储空间,且丢失Date类型的原生日期操作优势,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:37:08