我正在为mongodb使用java Spring和spring数据。
我有一个集合,需要包含过去3个月的仅文档,但所有文档都应该以某种方式保存(可能是文件的展示?)。我正在寻找解决方案,但我可以找到关于完整数据库备份的讨论。
将集合更新到最近3个月的最佳方法是什么? (每周一次的cron?) 如何保存收藏档案?我认为mongodump是一种矫枉过正的行为。
答案 0 :(得分:1)
mongoexport和mongodump都支持-q选项来指定查询以限制将被删除的文档。两者的选择更多地取决于您希望存储数据的格式。
假设您有一个带有时间戳字段的集合。您可以运行其中任何一个(在尖括号中填写所需的名称和时间):
mongoexport -d <yourdatabase> -c <yourcollection> -q "{ timestamp: { \$gt: <yourtimestamp>}}" -o <yourcollection_export_yourtimestamp>.json
mongodump -d <yourdatabase> -c <yourcollection> -q "{ timestamp: { \$gt: <yourtimestamp>}}"
然后删除旧数据。
或者,您可以通过cron定期拍摄带有ttl索引的集合中的任意一种方法,这样您就不必自己修剪它 - mongodb会自动删除旧数据:
db.collectioname.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 7862400 } )
这将根据文档
中的createdAt字段继续删除超过91天的任何文档答案 1 :(得分:0)
使用mongoexport,您可以备份单个集合而不是整个数据库。我会建议一个Cron-Job(就像你难过)导出数据并将数据库限制在过去3个月的文件中我删除的文件。
mongoexport -d databasename -c collectionname -o savefilename.json