【发布时间】:2019-10-02 05:57:16
【问题描述】:
我有一个在文档中存储应用程序日志的集合:
{
"_id" : ObjectId("5d92d5d01518a620ccaf015c"),
"MessageType" : "ApplocationLog",
"FireAndForget" : true,
"CreatedTimestamp" : ISODate("2019-10-01T06:28:00.198+01:00"),
"OriginReference" : "OriginReference",
"OriginName" : "OriginName",
"LogMessage" : "The log message",
"RetentionDays" : 1,
"LogSeverity" : "Error",
"ApplicationUserContextId" : "User1",
"ApplicationUserContextName" : "User1Name",
"Exception" : null,
"ErrorRelatedObjects" : null
}
我需要运行查询以从集合中删除当前系统日期减去“RetentionDays”大于文档的“CreatedTimestamp”的所有记录,即删除过期的日志文档。
我在我的应用程序中使用 MongoDB C# 驱动程序并试图找出最好的方法来做到这一点。我考虑过在插入文档时添加到期日期,事后看来这可能会使事情变得更容易?但我仍然需要使用查询来处理现有记录。
我还没有走多远,但开始尝试制定查找所有已过期记录的标准:
db.ApplicationLog.find({
"CreatedTimestamp": {
$gte:
new Date(new Date().setDate(new Date().getDate()-1))
}
})
如果我可以减去 'RetentionDays' 而不是上面硬编码的 1,也许我可以将其添加到删除查询的条件中?我是 MongoDB 的新手,所以在这方面有点挣扎。
【问题讨论】: