MongoDB批量將時(shí)間戳轉(zhuǎn)為通用日期格式示例代碼
前言
時(shí)間戳(timestamp),通常是一個(gè)字符序列,唯一地標(biāo)識(shí)某一刻的時(shí)間。本文將詳細(xì)介紹MongoDB批量將時(shí)間戳轉(zhuǎn)為通用日期格式的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
1,官網(wǎng)提供的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包含某個(gè)關(guān)鍵字測(cè)試'
cd /opt/soft/mongodb/bin
./mongo --host 192.168.0.1 --port 17017 test
db.test_info.find({"tname": {$regex: '測(cè)試', $options:'i'}})
db.test_info.find({"tname": {$regex:/測(cè)試.*/i}})
需要找出所有時(shí)間戳的數(shù)據(jù)記錄,因?yàn)闀r(shí)間戳多是以數(shù)字開(kāi)頭,最近幾年的都是14XXX的,所以正則表達(dá)式以14開(kāi)頭搜索,實(shí)現(xiàn)方式如下:
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條記錄,蠻多的,需要處理記錄數(shù)不少。
建立遍歷函數(shù):
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的脹數(shù)據(jù)
刪除查詢出來(lái)的集合數(shù)據(jù)
db.paymentinfo.remove( {"txnType": {$regex: '1', $options:'i'}}, 300 );
刪除所以查詢出來(lái)的記錄:
db.paymentinfo.remove( {"txnType": {$regex: '1', $options:'i'}});
刪除paymentTime=0的數(shù)據(jù)記錄
db.paymentinfo.remove( { paymentTime : "0" } )
4,遺留問(wèn)題需要解決
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)} 批量修改校驗(yàn)錯(cuò)誤日期數(shù)據(jù)的期待解決的問(wèn)題
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
#問(wèn)題在這里,這個(gè)日期是時(shí)間戳,比如1440560826340的模式,請(qǐng)問(wèn)下,在mongodb shell里面如何將時(shí)間戳變成字符串'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) });
看到這里也不能解決我的問(wèn)題,所以思路停止了,toLocaleString()獲得的是GST的日期格式串,不是我需要的yyyy-mm-dd hh:mm:ss結(jié)構(gòu)的日期格式數(shù)
5,找到突破口,使用JAVASCRIPT
mongodb官網(wǎng)已經(jīng)報(bào)錯(cuò)提示有說(shuō)明,mongodb shell里面是可以調(diào)用JavaScript腳本,這么說(shuō)來(lái),直接在窗口里面寫(xiě)js腳本來(lái)實(shí)現(xiàn)就ok了,然后準(zhǔn)備拿一條數(shù)據(jù)來(lái)驗(yàn)證是否正確,結(jié)果成功了,驗(yàn)證腳本如下: – 單獨(dú)一條集合數(shù)據(jù)中,將時(shí)間戳變成日期字符串:
db.paymentinfo.find({"_id":ObjectId("55d56cbbe4b0c1f89b5356a4")}).forEach(function (a) {
#這個(gè)函數(shù)是在月、日、時(shí)分秒的個(gè)位數(shù)字前面補(bǔ)0操作的
function tran_val(val){
if(parseInt(val)<10){
val="0" +val;
}
return val;
}
# 這里是paymentTime為時(shí)間戳
var datenew = new Date(parseInt(paymentTime));
# 獲取年月日
var year=datenew.getFullYear();
var month=tran_val(datenew.getMonth()+1);
var date=tran_val(datenew.getDate());
# 獲取時(shí)分秒
var hour=tran_val(datenew.getHours());
var minute=tran_val(datenew.getMinutes());
var second=tran_val(datenew.getSeconds());
# 組裝成標(biāo)準(zhǔn)的日期格式y(tǒng)yyy-mm-dd hh:mm:ss
var datastr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
a["paymentTime"]=datastr
print(paymentTime);
printjson(a) }
);
上面的例子表明直接用js腳本可以實(shí)現(xiàn)時(shí)間戳到日期格式轉(zhuǎn)變,那么下面就開(kāi)始for循環(huán)批量修改:
db.paymentinfo.update({"_id": ObjectId("55d56fdbe4b0c1f89b5356ae")},{$set:{"paymentTime" : "14400511608049527"}},true);
# 使用遍歷數(shù)組的方式來(lái)操作144開(kāi)頭的時(shí)間戳
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;
# 這里開(kāi)始進(jìn)行修改操作
db.paymentinfo.update({"_id": id},{$set:{"paymentTime" :datestr}},true);
db.paymentinfo.find({"_id": id});
}
# 使用遍歷數(shù)組的方式來(lái)操作145開(kāi)頭的時(shí)間戳
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,碰到新的問(wèn)題,統(tǒng)一日期格式,將斜杠變成橫杠
–批量修改日期 斜杠變成橫杠
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
OK,到此圓滿解決
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Windows系統(tǒng)下安裝Mongodb 3.2.x的步驟詳解
mongodb3.x版本有好多新功能,關(guān)于這方面參考官網(wǎng)即可,下面這篇文章主要給大家介紹了在Windows系統(tǒng)下安裝Mongodb 3.2.x的詳細(xì)步驟,文中介紹的非常詳細(xì),需要的朋友們可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-03-03
MongoDB學(xué)習(xí)之Text Search文本搜索功能
這篇文章主要給大家介紹了MongoDB之Text Search文本搜索功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
MongoDB創(chuàng)建用戶報(bào)錯(cuò)command createUser requires auth
這篇文章主要介紹了MongoDB創(chuàng)建用戶報(bào)錯(cuò)command createUser requires authentication的解決方法,文中通過(guò)代碼和圖文講解的非常詳細(xì),對(duì)大家的解決問(wèn)題有一定的幫助,需要的朋友可以參考下2024-09-09
MongoDB數(shù)據(jù)庫(kù)性能監(jiān)控詳解
MongoDB作為圖片和文檔的存儲(chǔ)數(shù)據(jù)庫(kù),為啥不直接存MySQL里,還要搭個(gè)MongoDB集群,麻不麻煩?這篇文章就帶你介紹MongoDB數(shù)據(jù)庫(kù)性能監(jiān)控,感興趣的同學(xué)可以參考閱讀2023-03-03
MongoDB系列教程(六):java操作mongodb實(shí)例
這篇文章主要介紹了MongoDB系列教程(六):java操作mongodb實(shí)例,本文講解了java中操作mongodb數(shù)據(jù)增加、刪除、修改、查詢數(shù)據(jù)等代碼實(shí)例,需要的朋友可以參考下2015-05-05
MongoDB數(shù)據(jù)庫(kù)部署環(huán)境準(zhǔn)備及使用介紹
這篇文章主要為大家介紹了MongoDB數(shù)據(jù)庫(kù)部署環(huán)境準(zhǔn)備以及基本的使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
MongoDB學(xué)習(xí)筆記之MapReduce使用示例
這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之MapReduce使用示例,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-07-07

