Node.js 在一定时间后自动删除mongo DB中的文档
我需要一个解决方案,在一定时间后自动删除mongo DB表中的文档。 我在这段代码中有一些bug。即使我指定过期时间为2分钟,它也会删除早于2分钟的文档 我的代码:Node.js 在一定时间后自动删除mongo DB中的文档,node.js,mongodb,Node.js,Mongodb,我需要一个解决方案,在一定时间后自动删除mongo DB表中的文档。 我在这段代码中有一些bug。即使我指定过期时间为2分钟,它也会删除早于2分钟的文档 我的代码: var mongoose = require("mongoose"); var loginSchema = new mongoose.Schema( /*{ expire_at: { type: Date, default: Date.now, expires: 60 } },*/ { email: {
var mongoose = require("mongoose");
var loginSchema = new mongoose.Schema(
/*{
expire_at: { type: Date, default: Date.now, expires: 60 }
},*/
{
email: {
type: String,
require: true,
min: 6,
max: 255,
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
},
password: {
type: String,
require: true,
max: 1024,
min: 6
},
latitude: {
type: String,
require: true
},
longitude: {
type: String,
require: true
},
IPAddress: {
type: String,
require: true
},
ISP: {
type: String,
require: true
},
Location: {
type: String,
require: true
},
isMobile: {
type: Boolean
},
MobileDeviceID: {
type: String
},
date: {
type: Date,
default: Date.now
},
expireAt: {
type: Date,
default: Date.now,
index: { expires: '2m' }
}
}
);
module.exports = mongoose.model("Login", loginSchema);
您可以使用MongoDB开箱即用提供的
生存时间(TTL)索引。TTL通过后,它会自动使数据过期,然后根据MongoDB文档将其从集合中删除
TTL索引是一种特殊的单字段索引,MongoDB可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。数据过期对于某些类型的信息非常有用,如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保留有限的时间
所以你需要像这样创建一个TTL索引
loginSchema.createIndex({“expire_at:1},{expireAfterSeconds:5})代码>
删除过期文档的后台任务每60秒运行一次。因此,在文档到期和后台任务运行之间的时间段内,文档可能会保留在集合中
希望这有帮助您可以使用MongoDB提供的现成的生存时间(TTL)索引。TTL通过后,它会自动使数据过期,然后根据MongoDB文档将其从集合中删除
TTL索引是一种特殊的单字段索引,MongoDB可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。数据过期对于某些类型的信息非常有用,如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保留有限的时间
所以你需要像这样创建一个TTL索引
loginSchema.createIndex({“expire_at:1},{expireAfterSeconds:5})代码>
删除过期文档的后台任务每60秒运行一次。因此,在文档到期和后台任务运行之间的时间段内,文档可能会保留在集合中
希望这有帮助这能回答您的问题吗?这回答了你的问题吗?这正是上面提供的重复链接中的一个答案所说的,请将问题标记为重复,而不是重复答案!!这正是上面提供的重复链接中的一个答案所说的,请将问题标记为重复,而不是重复答案!!