irpas技术客

mongoDB 日期排查踩坑_mongodb 拿数据时候跨天_你这个无聊的小demo

irpas 3854

文章目录 备忘和踩坑问题描述原因总结超级具体的总结

备忘和踩坑 问题描述

某天前端告诉我按日期筛选数据时某个日期缺数据了,但是我自己拿到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语句忘得差不多了。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mongodb #拿数据时候跨天 #日期排查踩坑 #mongo #日期