博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb中批量将时间戳转变通用日期格式
阅读量:6889 次
发布时间:2019-06-27

本文共 4107 字,大约阅读时间需要 13 分钟。

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)abcdef

2。mongodb的模糊查询

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

mongos> use posswitched to db posmongos> db.paymentinfo.find({
"paymentTime": {
$regex: '14', $options:'i'}}).count();mongos> db.paymentinfo.find({
"paymentTime": {
$regex: '144', $options:'i'}}).count();1995mongos>

查询到有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
# 使用遍历数组的方式来操作145开头的时间戳     var ds= db.paymentinfo.find({
"paymentTime": {
$regex: '145', $options:'i'}}); var dschilds=ds.toArray(); for (var i = 0;i

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

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

var ds= db.paymentinfo.find({
"paymentTime": {
$regex: '/', $options:'i'}}); var dschilds=ds.toArray(); for (var i = 0;i
-- insert datainsert into t1 select 1,'a' from db1.t2;call db1.proc_get_fints

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

转载地址:http://cqqbl.baihongyu.com/

你可能感兴趣的文章
Android eclipse环境搭建
查看>>
platform平台总线
查看>>
JS_小教程
查看>>
Could not load file or assembly 'Microsoft.AnalysisServices.SharePoint.Integration'
查看>>
Delphi中Chrome Chromium、Cef3学习笔记(六)
查看>>
oracle 11g RAC 安装前准备脚本
查看>>
【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之一
查看>>
redux-form(V7.4.2)笔记(三之补充)使用Flow初步
查看>>
组策略部署软件----将部署的软件分类
查看>>
无对象控制
查看>>
运维人员究竟如何提升价值,持续获得高薪?
查看>>
win7 下设置挂载Linux服务器nfs共享的数据
查看>>
演示:标准ACL的配置、及使用技巧、和相关局限
查看>>
6426C Lab5 部署和配置联合服务
查看>>
Lua之文件I/O
查看>>
Python里的17个“骚操作”好玩有趣
查看>>
为什么new MySqlParameter("@val", 0).Value == null?
查看>>
MongoDB 主从+分片集群配置
查看>>
Android第十七期 - 网络和本地图片轮播
查看>>
职场潜规则:公司出现这三种信号,你必须果断辞职!
查看>>