Node.js实现MongoDB中已有及新增数据的时间属性修改

本文记录了一个关于修复Node.js应用中MongoDB数据库时间类型错误的bug。在修复过程中,既要处理新插入数据的时间类型转换,又要解决已有数据的升级问题。对于新数据,存储时使用.toISOString()将时间戳转换为date类型;而对于旧数据,通过在升级过程中修改数据库字段类型来完成转换。遇到的问题包括ISODate()在node.js中不适用,需要使用new Date(),以及时间戳转Date的不兼容性问题。最终选择了修改数据库字段类型作为解决方案。
摘要由CSDN通过智能技术生成

       印象中正儿八经修的第一个后台bug,虽然看上去只是要修改数据库某表中的时间类型,但是要考虑已有数据需要改变,同时新加入的数据也要改变,涉及了一些升级相关的流程,踩了一些坑,搞完颇有成就感,小记一下~

       一个Bug引发的需求:“数据库中时间过滤使用的时间都是string类型,但是目标表存储的是date类型,导致filter请求返回数据永远为空”。

      成功的方案二:

1.对于新加入的数据,需要在一开始存入的时候把时间类型转换。

因为读取的时间是时间戳,所以直接转成date类型就很简单。用.toISOString() 即可。

let dbDate = new Date(file.stamptime).toISOString();

然后在一些时间计算时,把dbDate再转回时间戳,这样原来的计算逻辑基本不需要改变。ps:大概理解为什么存date类型,因为时间戳真的计算方便,如果使用string类型,很多天数计算都好麻烦的。转成时间戳就纯数字计算了诶。

比如,我们需要跟90天的期限做计算,就可以这样做:

// if expand 90 Days, then do something
if (new Date().getTime() > 
        ((new Date(dbDate).getTime()) - 90 * 24 * 60
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值