我想在文档创建3分钟后删除它。定义文档创建时间的字段是expiresAt。这是我迄今为止的设置。文档在3分钟后没有删除,因为它应该删除。
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const PostsAmountsTimeframesSchema = new Schema({
posts_amounts_timeframe: Number,
expireAt: {
type: Date,
default: new Date()
},
userid: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
})
PostsAmountsTimeframesSchema.index( { expireAt: 1 }, { expireAfterSeconds: 180 } )
const PostsAmountsTimeframes = mongoose.model('PostsAmountsTimeframes', PostsAmountsTimeframesSchema)
module.exports = PostsAmountsTimeframes
也尝试过
expireAt: {
type: Date,
default: new Date(),
expires: 180,
}
相同的结果。
PS:这是在服务器上创建文档的方式:
PostsAmountsTimeframes.create({
userid: req.session.userId,
posts_amounts_timeframe: req.session.posts_amounts_timeframe,
// expireAt: d
}, (error, postsamountstimeframes) => {
console.log(error)
})
4条答案
按热度按时间r55awzrz1#
溶液
使用此创建条目。我使用当前日期后3分钟过期收集。
应该有一种方法来做同样的事情与过期TTL。工作的方法,目前!
nom7f22z2#
我最近不得不使用mongoose(参见gist)创建一个TTL索引。我没有使用“default”选项,但我认为您的示例应该可以工作
这段带有“expires”的代码将为您创建一个mongo TTL索引,其值为
"expireAfterSeconds" : 180
,这正是您想要实现的。Mongo TTL索引将认为文档在
expireAt
值+expireAfterSeconds
秒后过期。有一点你没有提到的是mongo最终删除过期条目的方式:后台mongo作业将需要0到60秒来检测和删除它们:cf蒙古文件:
删除过期文档的后台任务每60秒运行一次。因此,在文档过期和后台任务运行之间的这段时间内,文档可能会保留在集合中。
tp5buhyn3#
这段代码应该可以:
yeotifhr4#
const yourSchema = new mongoose.Schema({ expireAt: { type: Date, default: Date.now() + (1000*60*60*24) // for 1 day } })
// 1000为1秒,默认值为到期时的实际值