zoukankan      html  css  js  c++  java
  • 一个从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
    
  • 相关阅读:
    top、ps -ef、ps aux的区别及内容详解
    img2pdf 报 img2pdf.AlphaChannelError: Refusing to work on images with alpha channel 的解决方案
    Scrapy命令行调用传入自定义参数
    查询Linux CPU架构
    LeetCode 216. 组合总和 III | Python
    LeetCode 40. 组合总和 II | Python
    LeetCode 39. 组合总和 | Python
    LeetCode 77. 组合 | Python
    LeetCode 347. 前 K 个高频元素 | Python
    LeetCode 107. 二叉树的层次遍历 II | Python
  • 原文地址:https://www.cnblogs.com/williamjie/p/10599947.html
Copyright © 2011-2022 走看看