前言
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。本文将详细介绍MongoDB批量将时间戳转为通用日期格式的相关内容,下面话不多说了,来一起看看详细的介绍吧
1,官网提供的MONGODB遍历脚本:
官方文档地址:https://docs.mongodb.org/manual/tutorial/remove-documents/
>var arr = ["ab","cd","ef"]
>var show = function(value,index,ar){ print(value) }
>arr.forEach(show)
ab
cd
ef
2,MONGODB的模糊查询
MongoDB模糊查询方法示例:
模糊查询:tname包含某个关键字测试'
cd /opt/soft/mongodb/bin ./mongo --host 192.168.0.1 --port 17017 test db.test_info.find({"tname": {$regex: '测试', $options:'i'}}) db.test_info.find({"tname": {$regex:/测试.*/i}})
需要找出所有时间戳的数据记录,因为时间戳多是以数字开头,最近几年的都是14XXX的,所以正则表达式以14开头搜索,实现方式如下:
mongos> use pos switched to db pos 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 (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); var ds= db.paymentinfo.find({"paymentTime": {$regex: '144', $options:'i'}}); for (var i = 0, len = 1; i < len; i++) { var child=dschilds[i]; var id=child._id; printjson(id); var paymentTime=child.paymentTime; var datestr=paymentTime #问题在这里,这个日期是时间戳,比如1440560826340的模式,请问下,在mongodb shell里面如何将时间戳变成字符串'2015-12-15 12: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"] = new Date(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操作的 function tran_val(val){ if(parseInt(val)<10){ val="0" +val; } return val; } # 这里是paymentTime为时间戳 var datenew = new Date(parseInt(paymentTime)); # 获取年月日 var year=datenew.getFullYear(); var month=tran_val(datenew.getMonth()+1); var date=tran_val(datenew.getDate()); # 获取时分秒 var hour=tran_val(datenew.getHours()); var minute=tran_val(datenew.getMinutes()); var second=tran_val(datenew.getSeconds()); # 组装成标准的日期格式yyyy-mm-dd hh:mm:ss var datastr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; a["paymentTime"]=datastr print(paymentTime); printjson(a) } );
上面的例子表明直接用js脚本可以实现时间戳到日期格式转变,那么下面就开始for循环批量修改:
db.paymentinfo.update({"_id": ObjectId("55d56fdbe4b0c1f89b5356ae")},{$set:{"paymentTime" : "14400511608049527"}},true); # 使用遍历数组的方式来操作144开头的时间戳 var ds= db.paymentinfo.find({"paymentTime": {$regex: '144', $options:'i'}}); var dschilds=ds.toArray(); for (var i = 0;i <dschilds.length ; i++) { var child=dschilds[i]; var id=child._id; var paymentTime=child.paymentTime; print(paymentTime); function tran_val(val){ if(parseInt(val)<10){ val="0" +val; } return val; } var datenew = new Date(parseInt(paymentTime)); var year=datenew.getFullYear(); var month=tran_val(datenew.getMonth()+1); var date=tran_val(datenew.getDate()); var hour=tran_val(datenew.getHours()); var minute=tran_val(datenew.getMinutes()); var second=tran_val(datenew.getSeconds()); var datestr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; # 这里开始进行修改操作 db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :datestr}},true); db.paymentinfo.find({"_id": id}); } # 使用遍历数组的方式来操作145开头的时间戳 var ds= db.paymentinfo.find({"paymentTime": {$regex: '145', $options:'i'}}); var dschilds=ds.toArray(); for (var i = 0;i <dschilds.length ; i++) { var child=dschilds[i]; var id=child._id; var paymentTime=child.paymentTime; print(paymentTime); function tran_val(val){ if(parseInt(val)<10){ val="0" +val; } return val; } var datenew = new Date(parseInt(paymentTime)); var year=datenew.getFullYear(); var month=tran_val(datenew.getMonth()+1); var date=tran_val(datenew.getDate()); var hour=tran_val(datenew.getHours()); var minute=tran_val(datenew.getMinutes()); var second=tran_val(datenew.getSeconds()); var datestr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :datestr}},true); db.paymentinfo.find({"_id": id}); }
6,碰到新的问题,统一日期格式,将斜杠变成横杠
–批量修改日期 斜杠变成横杠
var ds= db.paymentinfo.find({"paymentTime": {$regex: '/', $options:'i'}}); var dschilds=ds.toArray(); for (var i = 0;i <dschilds.length; i++) { var child=dschilds[i]; var id=child._id; var paymentTime=child.paymentTime; var paymentTime2=paymentTime.replace(/\//g,"-"); db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :paymentTime2}},true); print(paymentTime);print(paymentTime2); db.paymentinfo.find({"_id": id}); }
-- insert data insert into t1 select 1,'a' from db1.t2; call db1.proc_get_fints
OK,到此圆满解决
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 魔兽世界wlk敏锐贼一键输出宏是什么 wlk敏锐贼一键输出宏介绍
- 李逸朗2007-李威乐[英皇娱乐][WAV+CUE]
- DavidVersace-EyetoEye(2024)[24-44,1]
- SimoneLamsma,RobertKulek-Mendelssohn,Janacek,Schumann-SonatasforViolinandPiano【SAC
- 《街头篮球》大动作:新增五大服务器节点 优化玩家体验
- 任天堂宣布推出音乐APP!仅面向NSO订阅用户
- 《马路RPG:兄弟齐航》新预告!兄弟携手海岛冒险
- 王子鸣.2009-永远【九洲】【WAV分轨】
- 杭天琪.2002-水与火的缠绵【泰达】【WAV+CUE】
- 邱锋泽.2024-COlOR.Free【发现梦想】【FLAC分轨】
- 群星 《10年朋友Vol.8》滚石台湾版[WAV+CUE][1.G]
- 群星《2024好听新歌31》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《全天后》华纳[WAV+CUE][1.1G]
- 许乐《声愿HQCD》[正版原抓WAV+CUE]
- 黄凯芹《给你留念》头版限量编号MQA-UHQCD2024[低速原抓WAV+CUE]