MongoDB查询指定Epoch时间戳范围文档失败问题
问题原因及解决办法
核心问题
你查询用的上限时间戳(1693765800)远小于目标文档的时间戳(1693784771),导致该文档不在查询范围内,所以查不到。本质是你混淆了UTC时区和本地时区的时间戳转换逻辑。
具体分析
- 目标文档的
customerTransactionDate是03092023234611,对应本地时间2023-09-03 23:46:11,其本地时区Epoch时间戳为1693784771。 - 你误以为
1693765800是本地时间2023-09-04 00:00:00的Epoch,但实际这个时间戳对应的是UTC时间2023-09-03 18:30:00(以UTC+5:30时区为例),比目标文档的本地时间早了5小时16分,查询上限提前截止,自然漏掉了目标文档。
解决步骤
- 明确时间戳时区基准:先确认数据库中
customer_transaction_date_timestamp是基于本地时区还是UTC时区的Epoch(从你的文档来看,它是本地时区的时间戳)。 - 重新计算查询范围:
- 本地时间2023-09-03 00:00:00的Epoch时间戳:
1693699200(根据你的实际时区调整) - 本地时间2023-09-04 00:00:00的Epoch时间戳:
1693785600
- 本地时间2023-09-03 00:00:00的Epoch时间戳:
- 执行正确查询:
{ "customer_transaction_date_timestamp" : { "$gte" : 1693699200, "$lt" : 1693785600}}
验证方法
在MongoDB中执行以下命令,将时间戳转换为可读日期,确认时区基准是否正确:
db.collection.aggregate([ { $match: { customer_transaction_date_timestamp: 1693784771 } }, { $project: { localDate: { $toDate: "$customer_transaction_date_timestamp" }, utcDate: { $toDate: { $multiply: ["$customer_transaction_date_timestamp", 1000] } } } } ])
内容的提问来源于stack exchange,提问作者Vasu Sethia
相关产品推荐
相关产品推荐

