存档mongodb集合

时间:2014-05-12 12:31:05

标签: java spring mongodb spring-data

我正在为mongodb使用java Spring和spring数据。

我有一个集合,需要包含过去3个月的文档,但所有文档都应该以某种方式保存(可能是文件的展示?)。我正在寻找解决方案,但我可以找到关于完整数据库备份的讨论。

将集合更新到最近3个月的最佳方法是什么? (每周一次的cron?) 如何保存收藏档案?我认为mongodump是一种矫枉过正的行为。

2 个答案:

答案 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天的任何文档

http://docs.mongodb.org/manual/tutorial/expire-data/

答案 1 :(得分:0)

使用mongoexport,您可以备份单个集合而不是整个数据库。我会建议一个Cron-Job(就像你难过)导出数据并将数据库限制在过去3个月的文件中我删除的文件。

mongoexport -d databasename -c collectionname -o savefilename.json