Welcome 微信登录

首页 / 数据库 / MySQL / 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
ef2,mongodb的模糊查询
mongodb模糊查询参考:http://www.linuxidc.com/Linux/2016-01/126975.htm,需要找出所有时间戳的数据记录,因为时间戳多是以数字开头,最近几年的都是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});
   }  OK,到此圆满解决,特别感谢给我启发的网友 Aeolus@普 ,^_^更多MongoDB相关教程见以下内容:CentOS 编译安装 MongoDB与mongoDB的php扩展 http://www.linuxidc.com/Linux/2012-02/53833.htmCentOS 6 使用 yum 安装MongoDB及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htmUbuntu 13.04下安装MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htmMongoDB入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htmUbunu 14.04下MongoDB的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htmNagios监控MongoDB分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm基于CentOS 6.5操作系统搭建MongoDB服务 http://www.linuxidc.com/Linux/2014-11/108900.htmMongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里本文永久更新链接地址