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模糊查询參考:http://blog.csdn.net/5iasp/article/details/20714943,须要找出全部时间戳的数据记录,由于时间戳多是以数字开头,近期几年的都是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_fintsOK,到此圆满解决,特别感谢给我启示的网友 Aeolus@普 ,^_^
mongodb中批量将时间戳转变通用日期格式的更多相关文章
- web 前端 常见操作  将时间戳转成日期格式  字符串截取  使用mui制作选项卡
		1.将时间戳转成日期格式: //第一种 function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString( ... 
- shell的date日期循环方法:日期格式转时间戳计算,再将时间戳转回日期格式
		1,日期对象转时间戳current_day 2,计算增量的时间戳,即循环每步的增量one_day 3,循环体计算,日期变量加增量后重新赋值自己 4,时间戳转回日期格式后输出 current_day=2 ... 
- js时间戳转成日期格式
		将时间戳转换成日期格式:// 简单的一句代码var date = new Date(时间戳); //获取一个时间对象 注意:如果是uinx时间戳记得乘于1000.比如php函数time()获得的时间戳 ... 
- js angular 时间戳转换成日期格式 年月日 yyyy-MM-dd
		昨天写项目,要把时间戳转换成日期格式发给后端 我就去网上找 看到的一些都不是我想要的 索性自己就写了一个如图 下面是angular 模式 $scope.getMyDate = function(str ... 
- BootStrap Table将时间戳更改为日期格式
		一.使用BootStrap Table遇到的问题: 1.MyBatis从数据库中取出的时间格式如下:2017-12-04 21:43:19.0,时间后面多了一个点零. 2.从BootStrap Tab ... 
- php UNIX时间戳转换为指定日期格式
		用函数: date() 一般形式:date('Y-m-d H:i:s', unix时间) $date_unix=time();//获取当前时间,unix时间戳 echo 'Unix时间:'.$date ... 
- oracle中to_date详细用法示例(oracle日期格式转换)
		这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星期几.两个日期间的天数.月份差等用法 TO_DATE格式(以时间:2007-11-02 ... 
- vue 将时间戳转换成日期格式 (一)
		(1)创建一个处理时间格式的js,内容如下: ../../utils/formatDate.js export function formatDate(date, fmt) { if (/(y+)/. ... 
- js将时间戳转换成日期格式-陈远波
		var timestamp =1539598555000;//时间戳 //时间戳转换成time格式function timestampToTime(timestamp) { var date = ne ... 
随机推荐
- Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程
			BOOTP-TFTP-FTP 目录 文件传输流程 服务器建立过程 客户端建立过程 1 文件传输流程 / File Transfer Flow 利用BOOTP,TFTP,FTP三种传输协议,建立起客户端 ... 
- 网页结构——head标签内
			之前写网页都很标准的格式,最近一个项目出现了页面闪动等一系列问题[项目不是前后端分离], 所以这边有后台的功劳,有部分后台是不管你页面结构的,在他们操作的时候可能会在,你的head内meta前加内联c ... 
- bzoj 3864: Hero meet devil
			bzoj3864次元联通们 第一次写dp of dp (:з」∠) 不能再颓废啦 考虑最长匹配序列匹配书转移 由于dp[i][j]的转移可由上一行dp[i-1][j-1],dp[i-1][j],dp[ ... 
- [CC-CHANOQ]Chef and odd queries
			题目大意: 给定$n(10^5)$个线段$[l_i,r_i](1\leq l_i,r_i\leq n)$,有$q(q\leq10^5)$组询问,每次给出$m_i(\sum m_i\leq n)$个点$ ... 
- jdbc多种实现方式
			1,驱动加载 //注册驱动 //DriverManager.registerDriver(new Driver());此方法被淘汰 Class.forName("com.mysql.jdbc ... 
- Ubuntu 16.04下ssh启用root登录
			debian里root账户默认没有密码,但账户锁定. 当需要root权限时, 直接执行 sudo su 即可切换为root用户. 重新开启root账号,在命令行下执行 sudo passwd root ... 
- 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]
			在环境里是没有问题的 就是发布网站后,会出现“/”应用程序中的服务器错误.--------------------------------------------------------------- ... 
- delphi怎样编译LINUX程序
			delphi编译LINUX程序 DELPHI XE 10.2(TOKYO)开始可以开发LINUX控制台程序. 1)上传PASERVER到LINUX,并且运行PASERVER. 2)开始编译,PROFI ... 
- 利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)
			提供一种方法就是利用jquery.form.js. (1)这个框架集合form提交.验证.上传的功能. 核心方法 -- ajaxForm() 和 ajaxSubmit() $('#myForm').a ... 
- 在vs2012中配置使用iisexpress
			在vs2012中配置使用iisexpress vs2012支持基于iisexpress的web站点调试,这样可以尽可能与生产环境具备一样的环境. 但是,如果在vs2012中直接配置iis目录,通常 ... 
