一个从MongoDB中导出给定日期范围内数据的shell脚本

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/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中计算前几天或者后几天的日期?

方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#给定当前日期
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中进行删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/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

 

posted @   割肉机  阅读(1796)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示