30天后从mongoDB设置时间删除对象

时间:2018-10-17 00:32:14

标签: node.js database mongodb

我正在使用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,但是我不知道它是不是最佳解决方案。 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以确定在MongoDB中使用TTL(生存时间)索引。 使用此TTL,您可以在一定时间到期后或日历中的特定日期和时间删除任何文档。

根据您的问题,您希望在创建30天后使每个文档过期。 您已经有一个created字段,只需围绕它创建一个索引。

let activitySchema = new mongoose.Schema({
  .
  .
  .
  .
}, {timestamps: true});

activitySchema.index({createdAt: 1},{expireAfterSeconds: 2592000});

30天= 2592000秒