我想每天运行一个 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 吗?

    最佳答案

    是的你可以。

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

    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 --out redirection 替换 stdio :
    mongoexport --db mydb --collection mycollection\  --query "`./test2.sh`" >> ./test2.json
    

    关于bash - mongodb 导出和删除文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25358466/

    10-14 13:53
    查看更多