这篇文章给大家介绍MongoDB中怎么将时间戳转为日期格式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

MongoDB模糊查询方法示例:

模糊查询:tname包含某个关键字测试'

cd/opt/soft/mongodb/bin./mongo--host192.168.0.1--port17017testdb.test_info.find({"tname":{$regex:'测试',$options:'i'}})db.test_info.find({"tname":{$regex:/测试.*/i}})

需要找出所有时间戳的数据记录,因为时间戳多是以数字开头,最近几年的都是14XXX的,所以正则表达式以14开头搜索,实现方式如下:

mongos>useposswitchedtodbposmongos>db.paymentinfo.find({"paymentTime":{$regex:'14',$options:'i'}}).count();mongos>db.paymentinfo.find({"paymentTime":{$regex:'144',$options:'i'}}).count();1995mongos>

查询到有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 (var i = 0, len = 3; i < len; i++) {var child=dschilds[i]; var id=child._id; printjson((id)); var paymentTime=child.paymentTime; printjson(paymentTime)} 批量修改校验错误日期数据的期待解决的问题

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<len;i++){varchild=dschilds[i];varid=child._id;printjson(id);varpaymentTime=child.paymentTime;vardatestr=paymentTime#问题在这里,这个日期是时间戳,比如1440560826340的模式,请问下,在mongodbshell里面如何将时间戳变成字符串'2015-12-1512:34:16'这样的日期字符串呢?db.paymentinfo.update({"_id":id},{$set:{"paymentTime":datestr}},true);db.paymentinfo.find({"_id":id});}db.paymentinfo.find({"_id":ObjectId("55dd36dc45ce9e75b91eb340")}).forEach(function(a){a["paymentTime"]=newDate(parseInt(paymentTime)*1000).toLocaleString().replace(/:\d{1,2}$/,'');printjson(a)});

看到这里也不能解决我的问题,所以思路停止了,toLocaleString()获得的是GST的日期格式串,不是我需要的yyyy-mm-dd hh:mm:ss结构的日期格式数

5,找到突破口,使用JAVASCRIPT

mongodb官网已经报错提示有说明,mongodb shell里面是可以调用JavaScript脚本,这么说来,直接在窗口里面写js脚本来实现就ok了,然后准备拿一条数据来验证是否正确,结果成功了,验证脚本如下: – 单独一条集合数据中,将时间戳变成日期字符串:

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:ssvardatastr=year+"-"+month+"-"+date+""+hour+":"+minute+":"+second;a["paymentTime"]=datastrprint(paymentTime);printjson(a)});

上面的例子表明直接用js脚本可以实现时间戳到日期格式转变,那么下面就开始for循环批量修改:

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<dschilds.length;i++){varchild=dschilds[i];varid=child._id;varpaymentTime=child.paymentTime;print(paymentTime);functiontran_val(val){if(parseInt(val)<10){val="0"+val;}returnval;}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());vardatestr=year+"-"+month+"-"+date+""+hour+":"+minute+":"+second;#这里开始进行修改操作db.paymentinfo.update({"_id":id},{$set:{"paymentTime":datestr}},true);db.paymentinfo.find({"_id":id});}#使用遍历数组的方式来操作145开头的时间戳vards=db.paymentinfo.find({"paymentTime":{$regex:'145',$options:'i'}});vardschilds=ds.toArray();for(vari=0;i<dschilds.length;i++){varchild=dschilds[i];varid=child._id;varpaymentTime=child.paymentTime;print(paymentTime);functiontran_val(val){if(parseInt(val)<10){val="0"+val;}returnval;}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());vardatestr=year+"-"+month+"-"+date+""+hour+":"+minute+":"+second;db.paymentinfo.update({"_id":id},{$set:{"paymentTime":datestr}},true);db.paymentinfo.find({"_id":id});}

6,碰到新的问题,统一日期格式,将斜杠变成横杠

–批量修改日期 斜杠变成横杠

vards=db.paymentinfo.find({"paymentTime":{$regex:'/',$options:'i'}});vardschilds=ds.toArray();for(vari=0;i<dschilds.length;i++){varchild=dschilds[i];varid=child._id;varpaymentTime=child.paymentTime;varpaymentTime2=paymentTime.replace(/\//g,"-");db.paymentinfo.update({"_id":id},{$set:{"paymentTime":paymentTime2}},true);print(paymentTime);print(paymentTime2);db.paymentinfo.find({"_id":id});}

--insertdatainsertintot1select1,'a'fromdb1.t2;calldb1.proc_get_fints

关于MongoDB中怎么将时间戳转为日期格式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。