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",
}