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

MongoDB如何使用通配符匹配ISODate的00:00:00时间部分?

错误原因

ISODate()仅支持传入符合ISO 8601规范的标准日期字符串,不支持直接传入正则表达式作为入参,因此你之前的写法会触发参数类型不匹配的报错。

正确实现方案

兼容全版本实现(推荐无版本限制场景使用)

通过聚合框架的$dateToString操作符将日期字段的时分秒部分提取为字符串,直接匹配00:00:00即可:

db.CustomerSubscriptions.aggregate([
  {
    $match: {
      $expr: {
        $eq: [
          { $dateToString: { format: "%H:%M:%S", date: "$UpcomingOrders.NextOrderDate" } },
          "00:00:00"
        ]
      }
    }
  }
])

MongoDB 5.0+ 高性能实现

如果你的数据库版本≥5.0,可以使用$dateTrunc操作符做更高效的匹配:将日期按天截断后和原日期对比,相等则说明时分秒部分全为0,该写法支持命中日期字段的索引,查询性能更高:

db.CustomerSubscriptions.find({
  $expr: {
    $eq: [
      "$UpcomingOrders.NextOrderDate",
      { $dateTrunc: { date: "$UpcomingOrders.NextOrderDate", unit: "day" } }
    ]
  }
})

特殊场景适配

如果UpcomingOrders是数组类型,需要先通过$unwind拆分数组后再执行匹配:

db.CustomerSubscriptions.aggregate([
  { $unwind: "$UpcomingOrders" },
  {
    $match: {
      $expr: {
        $eq: [
          { $dateToString: { format: "%H:%M:%S", date: "$UpcomingOrders.NextOrderDate" } },
          "00:00:00"
        ]
      }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:57:03