备忘和踩坑
问题描述
某天前端告诉我按日期筛选数据时某个日期缺数据了,但是我自己拿到mongo查询日志里的语句自己到mongo执行语句时却发现没缺数据……百思不得其解
原因
后来经过同事提示,mongo存日期的默认时区是UTC世界时,UTC这玩意比东八区时间晚了八小时。我当时在mongo中看到5.25 16:00就意味自己没缺数据,事实上我真正该确认的日期是UTC时间5.24 16:00
总结
mongo采用UTC世界时,比东八区时间晚八小时
超级具体的总结
1.mongo的日期采用的是UTC时间时,相比起东八区完8小时:
mongoDB日期在Navicat等图形可视化界面 很容易看错,比如5.25日会显示成5.24 16:00之类的。。
今天debug的时候就被骗了,前台反应缺少5.25的数据,自己到mongodb定位时确看到了5.25 16:00导致自己误认为5.25的数据没有缺失、是查询写错。。。然而真正该检查的应该是5.24 16:00
2.第二个问题是mongo打出来的日志关于日期条件那部分,如果需要丢到mongo执行的话要记得把格式改成iso格式,不然搜不到。具体可以百度关键字“mongo日期查询”
日志举例:
{ "client_id" : "2333", "market" : 2333, "business_date" : { "$gte" : { "$date" : "2021-05-04T16:00:00.000Z"}, "$lte" : { "$date" : "2021-06-03T16:00:00.000Z"} } }
改为:
db.集合名称.find(
{ "client_id" : "2333",
"market" : 2333,
"business_date" : {
"$gte" : ISODate("2021-05-04T16:00:00.000Z"),
"$lte" : ISODate("2021-06-03T16:00:00.000Z")
}
}
日期格式忘了可以直接查看记录的ddl语句
在Navicat中把右下角的的logo切换成{}logo即可:
3.最后
mongo的日期显示可以查看官方文档了解一下,对此不是很熟。
mongo语句忘得差不多了。