您好,登錄后才能下訂單哦!
這篇文章給大家介紹MongoDB中怎么將時間戳轉為日期格式,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
MongoDB模糊查詢方法示例:
模糊查詢:tname包含某個關鍵字測試'
cd /opt/soft/mongodb/bin ./mongo --host 192.168.0.1 --port 17017 test db.test_info.find({"tname": {$regex: '測試', $options:'i'}}) db.test_info.find({"tname": {$regex:/測試.*/i}})
需要找出所有時間戳的數據記錄,因為時間戳多是以數字開頭,最近幾年的都是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_fints
關于MongoDB中怎么將時間戳轉為日期格式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。