在 MongoDB 中的特定时间删除集合的所有文档

Posted

技术标签:

【中文标题】在 MongoDB 中的特定时间删除集合的所有文档【英文标题】:Remove all documents of a collection at specific time in MongoDB 【发布时间】:2021-02-19 06:07:05 【问题描述】:

目标是在每天插入第一个新文档时删除集合中的所有旧文档。所以馆藏只保留日常文件,丢弃旧文件。

这里的关键部分是集合需要保留旧文档直到那天the first new document。也有可能几天都不会插入文档,所以应该保留旧的。

一种可能的解决方案是使用 prepost save middleware,并将当前日期与每次插入的最新文档创建日期进行比较。但我认为这工作量太大,可能有更高效、更好的方法来做到这一点。

任何建议将不胜感激。

【问题讨论】:

清晰:因此,如果我有 3 个 2020-11-05 的文档,则在 2020-11-05 之后插入的第一个文档(可能是 2020-11-06,07 等)将删除这三个? @BuzzMoschetti,是的 【参考方案1】:

MongoDB 唯一需要删除的文档是 TTL(生存时间),它是一种 MongoDB 索引 Here。

但特别是关于你的情况,没有你提到的其他方法。 Pre save是mongoose中可以使用的函数。

【讨论】:

【参考方案2】:

这主要归结为这一点。

var targ = new Date(the new date);
// start TX                                                                      
if(null != db.foo.findOne(d: $lt:targ))   // look for at least one older...
    db.foo.remove(d: $lt:targ); // ...and remove them all

db.foo.insert(newDoc); // insert in any case
// commit                                                                        

【讨论】:

以上是关于在 MongoDB 中的特定时间删除集合的所有文档的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 mongodb 特定文档中的数组中的项目? [复制]

javascript 如何将所有文档删除到mongodb中的集合中?

MongoDB中的删除文档删除集合

MongoDB Scala - 删除集合中的重复文档

从 MongoDB 集合中的特定文档开始获取“n”个文档

如何使用 Pentaho 中的 mongodb 删除步骤删除 mongodb 集合中的文档