一个从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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人