一個從MongoDB中導出給定日期范圍內數據的shell腳本


 

 

 

#!/bin/sh
ver=`date "+%Y%m%d"`

#d1, the beginning date, eg:2017-06-28
d1=$1
d1=`date -d $d1 +%F`
   
#transfer d1 to seconds
 
d2=`date -d $d1 +%s`
#increase d1 by one day
 
d2=`expr $d2 + 86400`
#transfer d2 from seconds to day
 
d2=`date -d @$d2 +%F`
  
#build query json
 
qj='{"dt":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}}'
#export
echo $qj
#/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoexport -h 172.ip --port 27017  -d sms -c sms_jour --query="$qj" --fileds="phone,msg,dt,novalidate_flag,appId,dept,smschannel" -o ./$ver_sms_his.csv

#/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoimport -h 10.35.ip --port 28040 -u smsadmin -p xxxxxx -d sms -c sms_jour --type=csv -f phone,msg,dt,novalidate_flag,appId,dept,smschannel --file ./$ver_sms_his.csv

#generate js for delete
echo 'db.sms_jour.remove({"dt":{{$gte:ISODate("'"$d1"'T00:00:00Z")}, "dt":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' > ./delete.js
#delete
#/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoexport -h ip --port 27017 -d sms ./delete.js

####################other info
#./mongoexport --db testDB --collection testColl --query="$qj" --fields="userId,userName" --type="csv" --out results"-$d1" --noHeaderLine
  
#/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoexport -h 172.19ip --port 27017   


#generate js for delete
#echo 'var db = connect("172.ip:27107/sms");' > delete.js
#echo 'db.testColl.remove({"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' >> delete.js

#./mongo delete.js
#/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongo delete.js

 

給定一個日期,如何在shell中計算前幾天或者后幾天的日期?

方法如下:

#給定當前日期
d1=`date +%F`
 
#計算兩天后的日期
offset=2
 
 
#d1轉換成秒, since 1970-01-01 00:00:00 UTC
d1s=`date -d $d1 +%s`
 
#將偏移天數換算成秒數
offset_s=`expr 86400 \* $offset` 
 
#計算偏移后 的秒數
d2s=`expr $d1s + $offset_s`
 
#將偏移后的秒數轉換成日期
d2=`date -d @$d2s + %F`

 

 

這里給出一個完整的腳本,用來從MongoDB中導出某個日期范圍內的數據,數據導出后從MongoDB中進行刪除

#!/bin/sh
#d1, the beginning date, eg:2017-06-28

d1=$1 
d1=`date -d $d1 +%F`
  
#transfer d1 to seconds

d2=`date -d $d1 +%s`
#increase d1 by one day

d2=`expr $d2 + 86400`
#transfer d2 from seconds to day

d2=`date -d @$d2 +%F`
 
#build query json

qj='{"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}}'
#export

./mongoexport --db testDB --collection testColl --query="$qj" --fields="userId,userName" --type="csv" --out results"-$d1" --noHeaderLine
 
#generate js for delete

echo 'var db = connect("testDB");' > delete.js
echo 'db.testColl.remove({"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' >> delete.js
#delete 

./mongo delete.js

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM