前言
時間戳(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了,然后準備拿一條數據來驗證是否正確,結果成功了,驗證腳本如下: 主站蜘蛛池模板: 乐昌市| 大港区| 龙泉市| 南平市| 隆昌县| 磴口县| 安溪县| 碌曲县| 昆明市| 逊克县| 伊川县| 内丘县| 高平市| 云林县| 西丰县| 禹城市| 新巴尔虎右旗| 惠水县| 永康市| 搜索| 循化| 德庆县| 西林县| 石嘴山市| 英山县| 屏山县| 肃南| 偏关县| 曲阜市| 政和县| 沙河市| 阿克| 雷波县| 老河口市| 六盘水市| 井陉县| 永泰县| 濮阳市| 西昌市| 马山县| 子洲县|