Linux Shell脚本中的复杂MongoDB语法
我创建了一个CRON作业,每天备份数据库 该脚本有一个Mongodump命令,其条件是转储7天以前的记录 脚本运行良好,直到我将Linux Shell脚本中的复杂MongoDB语法,linux,mongodb,shell,Linux,Mongodb,Shell,我创建了一个CRON作业,每天备份数据库 该脚本有一个Mongodump命令,其条件是转储7天以前的记录 脚本运行良好,直到我将--query参数添加到mongodump命令中 mongodump [host, port and dbparams] --query "{_id: {\$lt: ObjectId(Math.floor(new Date(Date.now() - 86400000*7)/1000).toString(16) + '0000000000000000')}}" 由于-
--query
参数添加到mongodump
命令中
mongodump [host, port and dbparams] --query "{_id: {\$lt: ObjectId(Math.floor(new Date(Date.now() - 86400000*7)/1000).toString(16) + '0000000000000000')}}"
由于--query
引发的错误,该错误表示:
assertion: 16619 code FailedToParse: FailedToParse: Expecting quoted string: offset:21
那么,将此查询集成到脚本中的正确方法是什么呢?您可以使用shell计算日期字符串,然后将其传递到--query选项中。以下是原始Javascript表达式和shell中的等效计算:
$ mongo --eval "Math.floor(new Date(Date.now() - 86400000*7)/1000).toString(16) + '0000000000000000'"
526a7ac00000000000000000
$ printf '%x0000000000000000' $(($(date +%s) - 86400*7))
526a7ac00000000000000000
然后,您将在一个简短的脚本中使用此脚本,如以下所示:
now=$(printf '%x0000000000000000' $(($(date +%s) - 86400*7)))
mongodump --query "{_id: {\$lt: '$now'}}"
希望这有帮助
Bruce是否使用
'$lt'
而不是\$lt
帮助?@其中一个错误是,不带'\'
的'$lt'
给出错误'字段中的第一个字符必须是[A-Za-z$\]:偏移量:7'
。我添加了'\'
以避开$
。Bruce的解决方案更简单一些:printf'%x0000000000000000'$(date--date='7天前'+%s)
很好的改进Rafa。