一个从MongoDB中导出给定日期范围内数据的shell脚本
前几天介绍了使用mongoexport的使用方法,结合date命令的使用,这里给出一个完整的脚本,用来从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
备注:如果MongoDB使用的不是默认端口27017,上面的脚本里mongoexport和mongo都需要增加–port参数,并且delete.js中的connect方法也需要指定端口,指定方式为:
var db = connect("127.0.0.1:port/testDB");