MongoDB批量将时间戳转为通⽤⽇期格式⽰例代码
前⾔
时间戳(timestamp),通常是⼀个字符序列,唯⼀地标识某⼀刻的时间。本⽂将详细介绍MongoDB批量将时间戳转为通⽤⽇期格式的相关内容,下⾯话不多说了,来
⼀起看看详细的介绍吧
1,官⽹提供的MONGODB遍历脚本:
2,MONGODB的模糊查询
MongoDB模糊查询⽅法⽰例:
模糊查询:tname包含某个关键字测试'
cd /opt/soft/mongodb/bin
./mongo --host 192.168.0.1 --port 17017 test
需要出所有时间戳的数据记录,因为时间戳多是以数字开头,最近⼏年的都是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条记录,蛮多的,需要处理记录数不少。
建⽴遍历函数:
if(x.title&&x.fileName){
tId);
}
})
PS:证明不能⽤,效果⼀般
3,⾸先删除⼀部分TXNTYPE为1的胀数据
删除查询出来的集合数据
ve( {"txnType": {$regex: '1', $options:'i'}}, 300 );
删除所以查询出来的记录:
ve( {"txnType": {$regex: '1', $options:'i'}});
删除paymentTime=0的数据记录
ve( { 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 FullYear();
var month=tran_Month()+1);
var date=tran_Date());
# 获取时分秒
var hour=tran_Hours());
var minute=tran_Minutes());
日期转字符串函数var second=tran_Seconds());
# 组装成标准的⽇期格式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 Array();
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 FullYear();
var month=tran_Month()+1);
var date=tran_Date());
var hour=tran_Hours());
var minute=tran_Minutes());
var second=tran_Seconds());
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 Array();
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 FullYear();
var month=tran_Month()+1);
var date=tran_Date());
var hour=tran_Hours());
var minute=tran_Minutes());
var second=tran_Seconds());
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 Array();
for (var i = 0;i <dschilds.length; i++) {
var child=dschilds[i];
var id=child._id;
var paymentTime=child.paymentTime;
var place(/\//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,到此圆满解决
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。