【问题标题】:mongodb export and remove docsmongodb 导出和删除文档
【发布时间】:2023-03-07 02:50:01
【问题描述】:

我想每天运行一个 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 个命令?我想在导出完成后运行删除命令。我可以将 2 合并到同一个 cron 吗?

【问题讨论】:

    标签: bash mongodb cron mongoexport


    【解决方案1】:

    是的,你可以。

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

    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
    

    如果你想附加每一个新的导出数据块,你应该用标准的unix stdio redirection替换--out

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

    【讨论】:

    • 效果很好!但是我可以这样做,导出将附加到文件中吗?
    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多