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
相关产品推荐
相关产品推荐

