我有一个问题。如何在特定时间删除猫鼬和nodejs用户?实际上,我希望在删除用户后60天内从数据库中删除该用户。如何实现?
我添加了类似Momentjs的内容,之后应该怎么做?用户执行删除操作60天后,应删除此代码。
suspended: true,
deleted: moment.utc().valueOf()
答案 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")
})
}
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后自动将其删除天。