在特定时间删除Mongoose,Nodejs用户

时间:2018-09-26 19:21:37

标签: node.js mongodb express mongoose

我有一个问题。如何在特定时间删除猫鼬和nodejs用户?实际上,我希望在删除用户后60天内从数据库中删除该用户。如何实现?

我添加了类似Momentjs的内容,之后应该怎么做?用户执行删除操作60天后,应删除此代码。

suspended: true, 
deleted: moment.utc().valueOf()

2 个答案:

答案 0 :(得分:1)

安装任何cron软件包,例如https://www.npmjs.com/package/node-schedule,在猫鼬模型中,请确保您存储的是created_at时间戳,而不仅仅是timestamps:true。每天运行cron

const UserSchema = new Schema({..}, { timestamps: true });

现在将代码段复制到您的app.js中

var schedule = require('node-schedule');

var j = schedule.scheduleJob('0 1 * * *', function(){
  return deleteOldUsers();
});

假设模型名称为User,目录为./models/User

const User = require('./models/User');

deleteOldUsers = () => {
  let current = new Date();
  // subtracting 60 days
  current.setDate(current.getDate() - 60);
  User.deleteMany({ created_at: {$lte: current} }, (err) => {
    if(err) return console.log("Error while erasing users " + err);
    console.log("successfully erased data")
  })
}

编辑-如果您想使用MOMENT JS代替DATE

const User = require('./models/User');
const moment = require('moment');

deleteOldUsers = () => {
 // subtracting 60 days
 let current = moment().subtract(60, 'days');
 current = moment.utc(current).format();
 User.deleteMany({ created_at: {$lte: current} }, (err) => {
   if(err) return console.log("Error while erasing users " + err);
   console.log("successfully erased data")
 })

}

答案 1 :(得分:0)

您应该查看TTL (Time To Live)partial index

从MongoDB 3.2开始,您可以在TTL索引中添加一个表达式,以便仅在文档匹配时才删除它们:

db.foo.createIndex({createdDate: 1}, {
    expireAfterSeconds: 5184000, // your 60 days
    partialFilterExpression: {
        // Will remove records which have the `isRemoved` flag equal to true
        isRemoved: true
    }
});

因此,这里的想法是您flag并将isRemoved设置为true的用户记录(默认值为false),然后实际上应该在60后自动将其删除天。