1,官网提供的mongodb遍历脚本:

  1. 官方文档地址:https://docs.mongodb.org/manual/tutorial/remove-documents/
  2. >var arr = ["ab","cd","ef"]
  3. >var show = function(value,index,ar){ print(value) }
  4. >arr.forEach(show)
  5. ab
  6. cd
  7. ef

2。mongodb的模糊查询

mongodb模糊查询參考:http://blog.csdn.net/5iasp/article/details/20714943,须要找出全部时间戳的数据记录,由于时间戳多是以数字开头,近期几年的都是14XXX的,所以正則表達式以14开头搜索。实现方式例如以下:

  1. mongos> use pos
  2. switched to db pos
  3. mongos>
  4. db.paymentinfo.find({"paymentTime": {$regex: '14', $options:'i'}}).count();
  5. mongos> db.paymentinfo.find({"paymentTime": {$regex: '144', $options:'i'}}).count();
  6. 1995
  7. mongos>

查询到有1995条记录。蛮多的,须要处理记录数不少。

建立遍历函数:

  1. db.cms_Content.find({"userId":"444333f107624489bae28140d1970bbc"}).forEach(function(x) {
  2. if(x.title&&x.fileName){
  3. print(x.contentId);
  4. db.cms_Content.update({"contentId":x.contentId},{"$set":{"title":x.fileName}});
  5. }
  6. })

PS:证明不能用,效果一般


3,首先删除一部分txnType为1的胀数据

删除查询出来的集合数据

  1. db.paymentinfo.remove( {"txnType": {$regex: '1', $options:'i'}}, 300 );

删除所以查询出来的记录:

  1. db.paymentinfo.remove( {"txnType": {$regex: '1', $options:'i'}});

删除paymentTime=0的数据记录

  1. 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)}

批量改动校验错误日期数据的期待解决的问题

  1. db.paymentinfo.update({"_id": ObjectId("55d56fdbe4b0c1f89b5356ae")},{$set:{"paymentTime" : "14400511608049527"}},true);
  2. var ds= db.paymentinfo.find({"paymentTime": {$regex: '144', $options:'i'}});
  3. for (var i = 0, len = 1; i < len; i++) {
  4. var child=dschilds[i];
  5. var id=child._id;
  6. printjson(id);
  7. var paymentTime=child.paymentTime;
  8. var datestr=paymentTime
  9. #问题在这里,这个日期是时间戳,比方1440560826340的模式。请问下。在mongodb shell里面怎样将时间戳变成字符串'2015-12-15 12:34:16'这种日期字符串呢?
  10. db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :datestr}},true);
  11. db.paymentinfo.find({"_id": id});
  12. }
  13. 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了,然后准备拿一条数据来验证是否正确,结果成功了,验证脚本例如以下:

– 单独一条集合数据中。将时间戳变成日期字符串:

  1. db.paymentinfo.find({"_id":ObjectId("55d56cbbe4b0c1f89b5356a4")}).forEach(function (a) {
  2. #这个函数是在月、日、时分秒的个位数字前面补0操作的
  3. function tran_val(val){
  4. if(parseInt(val)<10){
  5. val="0" +val;
  6. }
  7. return val;
  8. }
  9. # 这里是paymentTime为时间戳
  10. var datenew = new Date(parseInt(paymentTime));
  11. # 获取年月日
  12. var year=datenew.getFullYear();
  13. var month=tran_val(datenew.getMonth()+1);
  14. var date=tran_val(datenew.getDate());
  15. # 获取时分秒
  16. var hour=tran_val(datenew.getHours());
  17. var minute=tran_val(datenew.getMinutes());
  18. var second=tran_val(datenew.getSeconds());
  19. # 组装成标准的日期格式yyyy-mm-dd hh:mm:ss
  20. var datastr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
  21. a["paymentTime"]=datastr
  22. print(paymentTime);
  23. printjson(a) }
  24. );

上面的样例表明直接用js脚本能够实现时间戳到日期格式转变,那么以下就開始for循环批量改动:

  1. db.paymentinfo.update({"_id": ObjectId("55d56fdbe4b0c1f89b5356ae")},{$set:{"paymentTime" : "14400511608049527"}},true);
  2. # 使用遍历数组的方式来操作144开头的时间戳
  3. var ds= db.paymentinfo.find({"paymentTime": {$regex: '144', $options:'i'}});
  4. var dschilds=ds.toArray();
  5. for (var i = 0;i <dschilds.length ; i++) {
  6. var child=dschilds[i];
  7. var id=child._id;
  8. var paymentTime=child.paymentTime;
  9. print(paymentTime);
  10. function tran_val(val){
  11. if(parseInt(val)<10){
  12. val="0" +val;
  13. }
  14. return val;
  15. }
  16. var datenew = new Date(parseInt(paymentTime));
  17. var year=datenew.getFullYear();
  18. var month=tran_val(datenew.getMonth()+1);
  19. var date=tran_val(datenew.getDate());
  20. var hour=tran_val(datenew.getHours());
  21. var minute=tran_val(datenew.getMinutes());
  22. var second=tran_val(datenew.getSeconds());
  23. var datestr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
  24. # 这里開始进行改动操作
  25. db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :datestr}},true);
  26. db.paymentinfo.find({"_id": id});
  27. }
  1. # 使用遍历数组的方式来操作145开头的时间戳
  2. var ds= db.paymentinfo.find({"paymentTime": {$regex: '145', $options:'i'}});
  3. var dschilds=ds.toArray();
  4. for (var i = 0;i <dschilds.length ; i++) {
  5. var child=dschilds[i];
  6. var id=child._id;
  7. var paymentTime=child.paymentTime;
  8. print(paymentTime);
  9. function tran_val(val){
  10. if(parseInt(val)<10){
  11. val="0" +val;
  12. }
  13. return val;
  14. }
  15. var datenew = new Date(parseInt(paymentTime));
  16. var year=datenew.getFullYear();
  17. var month=tran_val(datenew.getMonth()+1);
  18. var date=tran_val(datenew.getDate());
  19. var hour=tran_val(datenew.getHours());
  20. var minute=tran_val(datenew.getMinutes());
  21. var second=tran_val(datenew.getSeconds());
  22. var datestr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
  23. db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :datestr}},true);
  24. db.paymentinfo.find({"_id": id});
  25. }

6。碰到新的问题,统一日期格式,将斜杠变成横杠

–批量改动日期 斜杠变成横杠

  1. var ds= db.paymentinfo.find({"paymentTime": {$regex: '/', $options:'i'}});
  2. var dschilds=ds.toArray();
  3. for (var i = 0;i <dschilds.length; i++) {
  4. var child=dschilds[i];
  5. var id=child._id;
  6. var paymentTime=child.paymentTime;
  7. var paymentTime2=paymentTime.replace(/\//g,"-");
  8. db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :paymentTime2}},true);
  9. print(paymentTime);print(paymentTime2);
  10. db.paymentinfo.find({"_id": id});
  11. }
  1. -- insert data
  2. insert into t1 select 1,'a' from db1.t2;
  3. call db1.proc_get_fints

OK,到此圆满解决,特别感谢给我启示的网友 Aeolus@普 ,^_^

mongodb中批量将时间戳转变通用日期格式的更多相关文章

  1. web 前端 常见操作 将时间戳转成日期格式 字符串截取 使用mui制作选项卡

    1.将时间戳转成日期格式: //第一种 function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString( ...

  2. shell的date日期循环方法:日期格式转时间戳计算,再将时间戳转回日期格式

    1,日期对象转时间戳current_day 2,计算增量的时间戳,即循环每步的增量one_day 3,循环体计算,日期变量加增量后重新赋值自己 4,时间戳转回日期格式后输出 current_day=2 ...

  3. js时间戳转成日期格式

    将时间戳转换成日期格式:// 简单的一句代码var date = new Date(时间戳); //获取一个时间对象 注意:如果是uinx时间戳记得乘于1000.比如php函数time()获得的时间戳 ...

  4. js angular 时间戳转换成日期格式 年月日 yyyy-MM-dd

    昨天写项目,要把时间戳转换成日期格式发给后端 我就去网上找 看到的一些都不是我想要的 索性自己就写了一个如图 下面是angular 模式 $scope.getMyDate = function(str ...

  5. BootStrap Table将时间戳更改为日期格式

    一.使用BootStrap Table遇到的问题: 1.MyBatis从数据库中取出的时间格式如下:2017-12-04 21:43:19.0,时间后面多了一个点零. 2.从BootStrap Tab ...

  6. php UNIX时间戳转换为指定日期格式

    用函数: date() 一般形式:date('Y-m-d H:i:s', unix时间) $date_unix=time();//获取当前时间,unix时间戳 echo 'Unix时间:'.$date ...

  7. oracle中to_date详细用法示例(oracle日期格式转换)

    这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星期几.两个日期间的天数.月份差等用法 TO_DATE格式(以时间:2007-11-02 ...

  8. vue 将时间戳转换成日期格式 (一)

    (1)创建一个处理时间格式的js,内容如下: ../../utils/formatDate.js export function formatDate(date, fmt) { if (/(y+)/. ...

  9. js将时间戳转换成日期格式-陈远波

    var timestamp =1539598555000;//时间戳 //时间戳转换成time格式function timestampToTime(timestamp) { var date = ne ...

随机推荐

  1. spoj - Grass Planting(树链剖分模板题)

    Grass Planting 题意 给出一棵树,树有边权.每次给出节点 (u, v) ,有两种操作:1. 把 u 到 v 路径上所有边的权值加 1.2. 查询 u 到 v 的权值之和. 分析 如果这些 ...

  2. 数据库系统入门 | Not Exisits 结构的灵活应用

    教材 /<数据库系统概念>第六版第三章内容 机械工程出版社:实验软件/Qracle 11g 写在前面 用下面的样例1引出我们讨论的这一类方法. 样例1:使用大学模式,用SQL写出以下查询, ...

  3. MySQL索引,MySQL中索引的限制?

    MySQL中索引的限制: 1.MyISAM存储引擎引键的长度综合不能超过1000字节: 2.BLOB和TEXT类型的列只能创建前缀索引: 3.MySQL目前不支持函数索引: 4.使用!= 或者< ...

  4. C#拦截系统消息的方法-Application.AddMessageFilter

    C#拦截系统消息的方法Application.AddMessageFilter Application.AddMessageFilter这个方法可以接收系统发出的消息: 首先定义一个类,继承IMess ...

  5. django book用户认证学习

    用户与Authentication 通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要 ...

  6. ElasticSearch refresh和flush的理解

    在索引数据的时候,要保证被索引的文档能够立即被搜索到,就要涉及到_refresh 和_flush这两个方法. 1.fresh 当索引一个文档,文档先是被存储在内存里面,默认1秒后,会进入文件系统缓存, ...

  7. 小白学react之网页获取微信用户信息

    通过上一篇<小白学react之EJS模版实战>我们学习了怎样通过EJS模版生成我们高定制化的index.html文件. 本篇我们将会继续延续我们的alt-tutorial项目的实战计划.去 ...

  8. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

  9. 2017.8.9在虚拟机中安装linux系统

    0 安装前提 已经安装好VM,并且配置好,具体过程参看随笔:2017.8.5 VMware的介绍与安装 相关随笔:2017.8.5 Linux达人养成计划 I 需要知道的概念:VMWare,虚拟机,真 ...

  10. 小tip: base64:URL背景图片与web页面性能优化

    转自:http://www.zhangxinxu.com/wordpress/?p=2341 一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP ...