Linux Shell脚本使用mongoexport一些查询条件的错误总结
正确写法 # 打包数据(stamp - stamp2这一天的数据)time1=1507381200time2=1507294800/usr/local/mongodb/bin/mongoexport -h 127.0.0.1 --port 3612 -u root -p root -d ${db_name} -c ${collection}-q
我在尝试写一个定时任务,在shell脚本里按日导出mongodb的数据
mongo查询条件为:
{time:{$lt:1507381200,$gt:1507294800}}
定义两个变量(都是时间戳)
stamp=1507381200
stamp2=1507294800
一开始是这样写的:
/usr/local/mongodb/bin/mongoexport -h 127.0.0.1 --port 3612 -u DarkGame -p dg#2014 -d ${db_name} -c ${var} -q {time:{$lt:$stamp,$gt:$stamp2}} -o ${dpath}/${var}.dat
${db_name}是数据库名字,${var}是表名,${dpath}/${var}.dat是打包数据的目标路径,这些大家都不用理,我们着重看查询条件的写法
{time:{$lt:$stamp,$gt:$stamp2}}
运行时候报错
too many positional arguments: [{time::1507294800}]
然后我改成:(两边加了单引号)
'{time:{$lt:$stamp,$gt:$stamp2}}'
还是报错
error validating settings: query '{time:{$lt:$stamp,$gt:$stamp2}}' is not valid JSON: invalid character '$' looking for beginning of value
最后修改成:(每个变量都用单引号括起来)
'{time:{$lt:'$stamp',$gt:'$stamp2'}}'
就可以了
附上最终的代码
# 打包数据(stamp - stamp2这一天的数据)
/usr/local/mongodb/bin/mongoexport -h 127.0.0.1 --port 3612 -u root -p root -d ${db_name} -c ${var} -q '{time:{$lt:'$stamp',$gt:'$stamp2'}}' -o ${dpath}/${var}.dat
运行结果
2017-11-08T13:56:04.467+1100 connected to: 127.0.0.1:3612
2017-11-08T13:56:04.495+1100 exported 149 records
更多推荐
所有评论(0)