mongodb更新日期类型为常用的格式

proface

项目中使用到了mongodb,通过客户端导入到mongodb后,日期类型的数据格式就乱了,因为从数据库导出的csv后2020-01-01 10:54:12这种格式的数据就变为了2020/12/31 21:12格式,mongodb用的不熟练,故在此记录一下

before

{
	"_id" : ObjectId("60190a1743b2f90855577f0d"),
	"sms_tpl_id" : 218455,
	"content" : "【浙农小贷】您正在进行身份认证,您的验证码是351663。如非本人操作,请忽略本短信。",
	"sendto" : -1211056729,
	"sendtime" : "2020/12/31 1:12",
	"info" : "操作成功!",
	"code" : 0,
	"sid" : "1.60942E+14",
	"fcount" : 1,
	"feed" : 1,
	"report_status" : 1,
	"report_msg" : "DELIVRD",
	"addTime" : "2020/12/31 1:12",
	"report_des" : "成功",
	"channelid" : 91,
	"requestip" : "139.224.146.139",
}

为什么要修改呢?
在mongodb的客户端进行查询的语法是

db.log_202011.find({"addTime":{$gte:"2020-12-31",$lt:"2021-01-01"}}).count()

这样查询是可以出来结果的,但是通过laravel中的mongodb扩展包,查询语句是

[2021-02-03 17:25:14] local.INFO: mongodb sql logs =>  [{"query":"log_202011.DeleteMany({\"$and\":[{\"addTime\":{\"$gte\":\"2020-12-31 00:00:00\"}},{\"addTime\":{\"$lte\":\"2020-12-31 23:59:59\"}}]})","bindings":[],"time":119.89}] 

却删除不了,执行结果是执行成功,但是当再去数据库查询的时候,这个范围内的日期还是在的。通过测试,发现是日期格式不统一导致的结果,必须把数据中的addTime字段也改为2020-12-31 23:59:59格式。

Solution

db.log_202011.find({}).forEach(function(x) {
    //自定义一个函数,如果日期中的数字是1位,则前面补0
	function format(val) {
		if (val < 10 && val.length < 2) {
			val = "0" + val;
		}
		return val;
	}
	var str = x.sendtime;
	//字符串分割成数组
	var tempAddTime = str.split(" ");
	//得到日期
	var newDate = tempAddTime[0].split("/");
	//得到具体时间
	var newTime = tempAddTime[1].split(":");
	//拼接字符串,时间的秒用了一个数字,但是没找到mongodb中的向下取整函数,因此用了toString方法
	var newAddTime = newDate[0] + "-" + format(newDate[1]) + "-" + format(newDate[2]) + " " + format(newTime[0]) + ":" + format(newTime[1]) + ":" + format(NumberInt(Math.random() * 60).toString());
    //赋值
	x.addTime = newAddTime;
	//更新
	db.log_202011.save(x);

})

after

{
	"_id" : ObjectId("60190a1743b2f90855577f0d"),
	"sms_tpl_id" : 218455,
	"content" : "【浙农小贷】您正在进行身份认证,您的验证码是351663。如非本人操作,请忽略本短信。",
	"sendto" : -1211056729,
	"sendtime" : "2020/12/31 21:12",
	"info" : "操作成功!",
	"code" : 0,
	"sid" : "1.60942E+14",
	"fcount" : 1,
	"feed" : 1,
	"report_status" : 1,
	"report_msg" : "DELIVRD",
	"addTime" : "2020-12-31 21:12:43",
	"report_des" : "成功",
	"channelid" : 91,
	"requestip" : "139.224.146.139",
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值