我正在使用MongoDB,Nodejs等...
我有一个有关用户活动的“活动”集合,例如“添加新项目”,“更新项目”,“删除项目”等,但是我不希望该活动永久存在于我的数据库中,我希望该活动在30日后过期创建并添加用户仪表板后几天,但是我现在不知道该怎么做...希望您能为我提供帮助! 谢谢!
这是我的活动架构:
let mongoose = require("mongoose");
let activitySchema = new mongoose.Schema({
activity: String,
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
created: {
type: Date,
default: Date.now
}
})
module.exports = mongoose.model('Activity', activitySchema);
这是我的服务器端:
(这是将所有用户活动发送到仪表板的原因)
//Render User Activity
exports.render_user_activity = (req, res) => {
let userid = req.user._id;
User.findById(userid)
.exec((err, user) => {
if (err) {
console.log(err);
}
Activity.find({ user: user })
.exec((err, activities) => {
if (err) {
console.log(err);
}
res.send(activities);
});
});
};
我已经读到我可以使用.createIndex,但是我不知道它是不是最佳解决方案。 谢谢!
答案 0 :(得分:1)
您可以确定在MongoDB中使用TTL(生存时间)索引。 使用此TTL,您可以在一定时间到期后或日历中的特定日期和时间删除任何文档。
根据您的问题,您希望在创建30天后使每个文档过期。
您已经有一个created
字段,只需围绕它创建一个索引。
let activitySchema = new mongoose.Schema({
.
.
.
.
}, {timestamps: true});
activitySchema.index({createdAt: 1},{expireAfterSeconds: 2592000});
30天= 2592000秒