我创建了一个每天备份数据库的 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
而抛出的错误,它说:
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'}}"
希望这有帮助,
布鲁斯