3

我想每天运行一个unix cron:

  • 将所有超过 3 个月的文档导出到文档
  • 从集合中的相同文档中删除。

对于我使用的导出部分:

mongoexport --db mydb --collection mycollection\  --query "`./test2.sh`" --out ./test2.json

并且“ ./test2.sh”文件包含:

#!/bin/bash
d=`date --date="-3 month" -u +"%Y-%m-%dT%H:%M:%SZ"`
echo '{ "timeCreated": { "$lte": { "$date": "'$d'" } } }'

对于删除部分,我可以这样做:

mongo mydb /home/dev/removeDocs.js

removeDocs.js:

var d = new Date();
d.setMonth(d.getMonth()-3);
db.GameHistory.remove({ timeCreated: { $lte: d} });

如何同步这两个命令?我想在导出完成后运行删除命令。我可以将 2 合并到同一个 cron 吗?

4

1 回答 1

3

是的你可以。

最简单的方法是将两个命令合并到一个单行中:

mongoexport --db mydb --collection mycollection\  --query "`./test2.sh`" --out ./test2.json && mongo mydb /home/dev/removeDocs.js

但我建议您创建 shell 脚本来存档您的数据库:

#!/bin/bash
set -e # stop on first exception
mongoexport --db mydb --collection mycollection\  --query "`./test2.sh`" --out ./test2.json
mongo mydb /home/dev/removeDocs.js

如果要附加每个新的导出数据块,则应替换--out为标准的unixstdio重定向

mongoexport --db mydb --collection mycollection\  --query "`./test2.sh`" >> ./test2.json
于 2014-08-18T15:21:32.687 回答