Linux Shell 脚本中的复杂 MongoDB 语法



我创建了一个每天备份数据库的 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'}}"

希望这有帮助,

布鲁斯

最新更新