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

如何在MongoDB中仅按日期维度查询日期字段忽略时分秒

MongoDB按天维度匹配日期查询方案

方案1:范围查询(推荐)

该方案支持命中deliveryDate字段的普通索引,大数据量下查询性能最优:

  • 构造目标日期当天的0点整作为起始时间,目标日期下一天的0点整作为结束时间
  • 用$gte+$lt的范围条件匹配落在该区间内的所有日期数据
    示例代码:
// 目标查询日期:2021年8月13日
const targetDayStart = new Date('2021-08-13T00:00:00.000Z');
const nextDayStart = new Date('2021-08-14T00:00:00.000Z');

model.find({
  deliveryDate: {
    $gte: targetDayStart,
    $lt: nextDayStart
  }
})

方案2:聚合日期字段匹配(仅适合小数据量场景)

如果数据量很小不需要考虑索引命中,也可以直接提取日期的年、月、日字段匹配:

model.find({
  $expr: {
    $and: [
      // 匹配年份2021
      { $eq: [{ $year: "$deliveryDate" }, 2021] },
      // 匹配月份8月
      { $eq: [{ $month: "$deliveryDate" }, 8] },
      // 匹配当月13日
      { $eq: [{ $dayOfMonth: "$deliveryDate" }, 13] }
    ]
  }
})

该方案需要对每条查询数据做日期计算,无法命中deliveryDate的普通索引,数据量超过万级不推荐使用。

注意事项

你当前使用的查询语句中日期字符串new Date("021-08-13T18:30:00.000Z")的年份缺失了前导的数字2,会生成错误的日期对象,需要修正为2021-08-13开头的合法格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:00:03