在 MongoDB 中的特定时间删除集合的所有文档
Posted
技术标签:
【中文标题】在 MongoDB 中的特定时间删除集合的所有文档【英文标题】:Remove all documents of a collection at specific time in MongoDB 【发布时间】:2021-02-19 06:07:05 【问题描述】:目标是在每天插入第一个新文档时删除集合中的所有旧文档。所以馆藏只保留日常文件,丢弃旧文件。
这里的关键部分是集合需要保留旧文档直到那天the first new document
。也有可能几天都不会插入文档,所以应该保留旧的。
一种可能的解决方案是使用 pre 或 post 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 特定文档中的数组中的项目? [复制]