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

MongoDB中如何按指定小时查询文档并修改createdDate的小时部分?

MongoDB按指定小时查询并修改createdDate字段

1. 查询指定小时的文档

如果你需要匹配createdDate字段精确到时分秒(比如07:00:00)的文档,可使用$expr结合日期提取操作符筛选:

db.collection.find({
  $expr: {
    $and: [
      { $eq: [{ $hour: "$createdDate" }, 7] },
      { $eq: [{ $minute: "$createdDate" }, 0] },
      { $eq: [{ $second: "$createdDate" }, 0] }
    ]
  }
})

若只需匹配小时为7点(不限制分秒),可简化查询条件:

db.collection.find({
  $expr: {
    $eq: [{ $hour: "$createdDate" }, 7]
  }
})

2. 更新匹配文档的createdDate到指定小时

使用updateMany结合聚合管道,保留原日期的年、月、日,将时分秒替换为目标值(比如02:00:00):

db.collection.updateMany(
  // 复用上面的查询条件
  {
    $expr: {
      $and: [
        { $eq: [{ $hour: "$createdDate" }, 7] },
        { $eq: [{ $minute: "$createdDate" }, 0] },
        { $eq: [{ $second: "$createdDate" }, 0] }
      ]
    }
  },
  [
    {
      $set: {
        createdDate: {
          $dateFromParts: {
            year: { $year: "$createdDate" },
            month: { $month: "$createdDate" },
            day: { $dayOfMonth: "$createdDate" },
            hour: 2,
            minute: 0,
            second: 0,
            timezone: "UTC"
          }
        }
      }
    }
  ]
)

补充说明

  • $hour/$minute/$second默认基于UTC时区提取日期对应部分
  • $dateFromParts用于构造新的ISO日期,确保仅替换时分秒,年月日与原文档一致
  • 如果需要适配其他时区,可调整timezone参数(例如"Asia/Shanghai")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:08:21