Node.js操作MongoDB根据日期Date查询数据
背景#
MongoDB里,日期Date类型数据使用的是ISODate,是GMT(格林尼治标准时)时间,而我们处在东八区(比标准时间多8个小时),所以实际转换的时候程序里的时间应该是GMT+8,转换到MongoDB下的ISODate就是标准的GMT时间
问题&解决#
现在的需求是通过Node.js根据某个日期查询该天的所有数据,这个查询如果只通过MongoDB写的话其实不难,类似这样:
db.getCollection('collectionName').find( {"cur_date": {"$gt":ISODate("2019-05-29 0:0:0.000Z"), "$lt":ISODate("2019-05-30 0:0:0.000Z")} } )
但是,在Node.js里无法使用ISODate(会报错:ISODate is no defined),所以不能直接这么写,而应该这么写(Node.js环境下):
var query = { // 小时设为8是为了解决我们时区比GMT多8个小时 "cur_date":{"$gt":new Date(new Date(dateStr+" 8:00:00").toISOString()), "$lt":new Date(new Date(nextDateStr+" 8:00:00").toISOString())} }; // 再使用mongodb查询调用这个query作为查询条件 var results = db.collection('collectionName').find(query);
在这里使用了Date的toISOString转换成ISODate字符串再查询即可
总结#
日期查询时当mongodb中存储的是Date类型时,不是简单的字符串比较即可解决的,需要先转换成mongodb中的ISODate类型数据比较,并且要注意所在时区是否需要调整“小时”
作者:冲锋的麦克
出处:https://www.cnblogs.com/zhangwenju/p/16936198.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示