我在尝试写一个定时任务,在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

Logo

更多推荐