我将 Nestjs 与 Mongodb 一起使用,并希望在 TTL 过期后自动从 api-hit 日志集合中删除记录。我知道如何使用 expiresAfterSeconds 配置自动删除记录的模式,但场景是:
具有常量“expireAfterSeconds”的 TTL 配置。
Const mongoose = require(‘mongoose’)
Const userSchema = new mongoose.Schema({
{
createdOn: {
type: Date,
required: true
},
.
.
.
}, {timestamps: true})
**userSchema.index({createdOn: 1}, {expireAfterSeconds: 3600});**
但我想要的是动态配置“expireAfterSeconds”,如下所示(每个记录应该有不同的 TTL)
**userSchema.index({createdOn: 1}, {expireAfterSeconds: dynamicTTL});**
请为上述亲爱的开发人员提供解决方案!
TTL索引可以相同,将expiryAfterSeconds设置为0,如下所示。
userSchema.index({createdOn: 1}, {expireAfterSeconds: 0});
然后在创建 api-hit-log 文档时针对用户调整“createdOn”。创建访问日志时,必须针对当前用户查询日志过期设置集合,并获取保留时间并用于计算文档的createdOn。
例如假设今天为两个用户 u1 和 u2 创建了两个日志条目。根据业务需要,u1和u2的保留时间分别为1天和2天。
log expiry time : access time + retention time (in seconds)
log expiry time for user u1 = 24.04.2024 14HH:00:00 + (60 * 60 * 24 * 1) = 25.04.2024 14HH:00:00
log expiry time for user u2 = 24.04.2024 16HH:00:00 + (60 * 60 * 24 * 2) = 26.04.2024 16HH:00:00
请参考类似的问答。 在特定时钟时间使文档过期