国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MongoDB > 正文

MongoDB批量將時間戳轉為通用日期格式示例代碼

2020-03-14 12:50:08
字體:
來源:轉載
供稿:網友

前言

時間戳(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 testdb.test_info.find({"tname": {$regex: '測試', $options:'i'}}) db.test_info.find({"tname": {$regex:/測試.*/i}}) 

需要找出所有時間戳的數據記錄,因為時間戳多是以數字開頭,最近幾年的都是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 <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 datainsert into t1 select 1,'a' from db1.t2;call db1.proc_get_fints

OK,到此圓滿解決

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄陵县| 陵水| 礼泉县| 修水县| 灵宝市| 新源县| 苍南县| 新邵县| 崇阳县| 梧州市| 龙南县| 政和县| 雷波县| 财经| 镇沅| 那曲县| 江城| 胶南市| 江山市| 铅山县| 普格县| 唐山市| 治县。| 保亭| 启东市| 淮阳县| 白山市| 容城县| 南通市| 三门峡市| 祥云县| 武冈市| 南宁市| 哈尔滨市| 平邑县| 鄂伦春自治旗| 尼勒克县| 仙居县| 乐至县| 新余市| 平顶山市|