按日期删除 MongoDB 文档的最快方法是什么?
Which is the fastest way to remove MongoDB documents by Date?
在我们公司,我们保留了八天的数据(大约有一百万条记录。)所以我们有一个 cronjob,每天删除超过八天的文件。现在我们使用 Published 字段,该字段未编入索引。
删除 100.000 条记录大约需要 15 分钟,我们发现这个操作太长了。
这是一个查询,其中 'docs' 是一个包含我们不想删除的文档数组的变量。 'theDate' 变量是八天前的日期。
records.remove( { "Published" : { $lte : theDate }, "_id" : { $nin : docs } }
使用带索引的_id字段来命令做这个操作会不会更好? 我们如何使用 _id 字段来执行相同的操作?
完全放弃 Cron 作业:这是针对 TTL 索引的作业。 http://docs.mongodb.org/manual/core/index-ttl/
使用 expireAfterSeconds: 691200
在 Published
字段上创建 TTL 索引,并观察您的文档在发布 8 天后自动删除。
如果您不想在发布 8 天后不加选择地删除所有文档,请保留您的 Cron 作业并在 Published
字段上创建一个普通索引。
在我们公司,我们保留了八天的数据(大约有一百万条记录。)所以我们有一个 cronjob,每天删除超过八天的文件。现在我们使用 Published 字段,该字段未编入索引。
删除 100.000 条记录大约需要 15 分钟,我们发现这个操作太长了。
这是一个查询,其中 'docs' 是一个包含我们不想删除的文档数组的变量。 'theDate' 变量是八天前的日期。
records.remove( { "Published" : { $lte : theDate }, "_id" : { $nin : docs } }
使用带索引的_id字段来命令做这个操作会不会更好? 我们如何使用 _id 字段来执行相同的操作?
完全放弃 Cron 作业:这是针对 TTL 索引的作业。 http://docs.mongodb.org/manual/core/index-ttl/
使用 expireAfterSeconds: 691200
在 Published
字段上创建 TTL 索引,并观察您的文档在发布 8 天后自动删除。
如果您不想在发布 8 天后不加选择地删除所有文档,请保留您的 Cron 作业并在 Published
字段上创建一个普通索引。