使用MongoDB删除过时的数据

我有IoT设备通过MQTT将压力数据读取到MongoDB中。

问题是,随着时间的推移,需要大量资源来绘制此数据图,这也浪费了存储空间。因此,我想这样做,以便逐渐删除保存的数据。我想将1/1保留一个小时,将1/4保留一天,再将1/4保留一周,再将1/4永久保留。我最初的想法是在发布数据时使用某种模数,设置正确的时间限制。

我尝试查看MongoDB TTL函数,但是在我看来,它正在为整个集合设置一个计时器,而我唯一的选择是哪些特定文档将受到它的影响。

我有Java中间件为我发布数据到MongoDB,让Java程序做这些事情更好吗?我仍然不确定如何删除每个 n 条目。

coalawang 回答:使用MongoDB删除过时的数据

在我公司,我也必须清理过时的数据。幸运的是,集合的文档有过时的日期(基本上是“上次修改日期”),我能够使用Java来筛选超过阈值的文档集合。

我可能会编写一个被触发以每天运行的组件或脚本,该组件或脚本将查看您文档中的一个元素(希望是日期),然后开始删除每四个元素或不基于返回的对象数组X的元素时间的长短。

,

mongo TTL索引针对每个文档。参见:https://docs.mongodb.com/manual/core/index-ttl/

您需要一个带有日期值的字段。对于您的情况,建议您将此字段设置为您希望文档过期的日期,然后创建如下所示的索引:

db.collection.createIndex( { "expireAt": 1 },{ expireAfterSeconds: 0} )

这将使mongo在达到该日期时使文档过期。

请记住,如前所述,您需要事先确定有效期,因此在插入文档时需要做1/4的事情。

本文链接:https://www.f2er.com/3137885.html

大家都在问