• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB批量将时间戳转为通用日期格式示例代码

    前言

    时间戳(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.titlex.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,到此圆满解决

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • 利用Mongoose让JSON数据直接插入或更新到MongoDB
    • JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
    • python读取json文件并将数据插入到mongodb的方法
    • MongoDB执行mongoexport时的异常及分析(数字类型的查询)
    • Python实现批量读取图片并存入mongodb数据库的方法示例
    • Mongodb批量删除gridfs文件实例
    • MongoDB单表数据的导出和恢复实例讲解
    • MongoDB备份、还原、导出、导入、克隆操作示例
    • 深入分析Mongodb数据的导入导出
    • MongoDB导出查询结果到文件例子
    • mongodb 数据库操作--备份 还原 导出 导入
    • MongoDB使用mongoexport和mongoimport命令,批量导出和导入JSON数据到同一张表的实例
    上一篇:db.serverStatus()命名执行时报无权限问题的解决方法
    下一篇:MongoDB磁盘IO问题的3种解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB批量将时间戳转为通用日期格式示例代码 MongoDB,批量,将,时间,戳,