MongoDB批量将时间戳转为通用日期格式示例代码
前言
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。本文将详细介绍MongoDB批量将时间戳转为通用日期格式的相关内容,下面话不多说了,来一起看看详细的介绍吧
1,官网提供的MONGODB遍历脚本:
官方文档地址:https://docs.mongodb.org/manual/tutorial/remove-documents/
>vararr=["ab","cd","ef"]
>varshow=function(value,index,ar){print(value)}
>arr.forEach(show)
ab
cd
ef
2,MONGODB的模糊查询
MongoDB模糊查询方法示例:
模糊查询:tname包含某个关键字测试'
cd/opt/soft/mongodb/bin ./mongo--host192.168.0.1--port17017test db.test_info.find({"tname":{$regex:'测试',$options:'i'}}) db.test_info.find({"tname":{$regex:/测试.*/i}})
需要找出所有时间戳的数据记录,因为时间戳多是以数字开头,最近几年的都是14XXX的,所以正则表达式以14开头搜索,实现方式如下:
mongos>usepos switchedtodbpos mongos> db.paymentinfo.find({"paymentTime":{$regex:'14',$options:'i'}}).count(); mongos>db.paymentinfo.find({"paymentTime":{$regex:'144',$options:'i'}}).count(); 1995 mongos>
查询到有1995条记录,蛮多的,需要处理记录数不少。
建立遍历函数:
db.cms_Content.find({"userId":"444333f107624489bae28140d1970bbc"}).forEach(function(x){ if(x.title&&x.fileName){ print(x.contentId); db.cms_Content.update({"contentId":x.contentId},{"$set":{"title":x.fileName}}); } })
PS:证明不能用,效果一般
3,首先删除一部分TXNTYPE为1的胀数据
删除查询出来的集合数据
db.paymentinfo.remove({"txnType":{$regex:'1',$options:'i'}},300);
删除所以查询出来的记录:
db.paymentinfo.remove({"txnType":{$regex:'1',$options:'i'}});
删除paymentTime=0的数据记录
db.paymentinfo.remove({paymentTime:"0"})
4,遗留问题需要解决
for(vari=0,len=3;i 看到这里也不能解决我的问题,所以思路停止了,toLocaleString()获得的是GST的日期格式串,不是我需要的yyyy-mm-ddhh:mm:ss结构的日期格式数 5,找到突破口,使用JAVASCRIPT mongodb官网已经报错提示有说明,mongodbshell里面是可以调用JavaScript脚本,这么说来,直接在窗口里面写js脚本来实现就ok了,然后准备拿一条数据来验证是否正确,结果成功了,验证脚本如下: –单独一条集合数据中,将时间戳变成日期字符串: 上面的例子表明直接用js脚本可以实现时间戳到日期格式转变,那么下面就开始for循环批量修改: 6,碰到新的问题,统一日期格式,将斜杠变成横杠 –批量修改日期斜杠变成横杠 OK,到此圆满解决 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
db.paymentinfo.update({"_id":ObjectId("55d56fdbe4b0c1f89b5356ae")},{$set:{"paymentTime":"14400511608049527"}},true);
vards=db.paymentinfo.find({"paymentTime":{$regex:'144',$options:'i'}});
for(vari=0,len=1;i
db.paymentinfo.find({"_id":ObjectId("55d56cbbe4b0c1f89b5356a4")}).forEach(function(a){
#这个函数是在月、日、时分秒的个位数字前面补0操作的
functiontran_val(val){
if(parseInt(val)<10){
val="0"+val;
}
returnval;
}
#这里是paymentTime为时间戳
vardatenew=newDate(parseInt(paymentTime));
#获取年月日
varyear=datenew.getFullYear();
varmonth=tran_val(datenew.getMonth()+1);
vardate=tran_val(datenew.getDate());
#获取时分秒
varhour=tran_val(datenew.getHours());
varminute=tran_val(datenew.getMinutes());
varsecond=tran_val(datenew.getSeconds());
#组装成标准的日期格式yyyy-mm-ddhh:mm:ss
vardatastr=year+"-"+month+"-"+date+""+hour+":"+minute+":"+second;
a["paymentTime"]=datastr
print(paymentTime);
printjson(a)}
);
db.paymentinfo.update({"_id":ObjectId("55d56fdbe4b0c1f89b5356ae")},{$set:{"paymentTime":"14400511608049527"}},true);
#使用遍历数组的方式来操作144开头的时间戳
vards=db.paymentinfo.find({"paymentTime":{$regex:'144',$options:'i'}});
vardschilds=ds.toArray();
for(vari=0;i
vards=db.paymentinfo.find({"paymentTime":{$regex:'/',$options:'i'}});
vardschilds=ds.toArray();
for(vari=0;i
--insertdata
insertintot1select1,'a'fromdb1.t2;
calldb1.proc_get_fints