如何在MongoDB中为筛选后的文档的Timestamp字段添加小时数?
用单条updateMany修正MongoDB错误时间戳
你可以直接在updateMany中结合查询条件和聚合式更新操作,无需先执行聚合查询再单独更新。以下是整合后的完整语句:
db.opts.updateMany( // 查询条件:匹配UTC时间小时为13的文档 { $expr: { $eq: [ { $hour: "$timestamp" }, 13 ] } }, // 更新操作:给timestamp增加7小时(换算为7*60*60*1000毫秒) { $set: { timestamp: { $add: [ "$timestamp", 7 * 60 * 60 * 1000 ] } } } )
关键细节说明:
- 精准筛选受影响文档:通过
$expr允许在查询阶段使用聚合运算符$hour,直接判断timestamp的UTC小时数是否为13,确保只修改错误录入的文档。 - 一步完成字段更新:无需定义
new_timestamp中间字段,直接在$set中用$add计算新时间戳,把原时间戳加上7小时对应的毫秒数,完成修正。
执行效果:
运行该语句后,原文档中timestamp为ISODate("2024-06-17T13:00:00.000+0000")的条目会被修正为ISODate("2024-06-17T20:00:00.000+0000"),原本UTC时间20:00的文档不会被改动,完全符合你的期望。
内容的提问来源于stack exchange,提问作者fip
相关产品推荐
相关产品推荐

