Удалить пользователя Mongoose, Nodejs в определенное время - PullRequest
0 голосов
/ 26 сентября 2018

У меня вопрос. Как удалить пользователя mongoose и nodejs в указанное время?На самом деле, я хочу, чтобы пользователь был удален из базы данных в течение 60 дней после его удаления. Как этого добиться?

Я добавил что-то вроде Momentjs, как это должно происходить после этого?Этот код должен быть удален через 60 дней, когда пользователь выполняет операцию удаления.

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

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

установите любой пакет cron, например https://www.npmjs.com/package/node-schedule, и в вашей модели mongoose убедитесь, что вы сохраняете временную метку созданного_тата, если не просто 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")
  })
}

РЕДАКТИРОВАТЬ - ЕСЛИ ВЫ ХОТИТЕ ИСПОЛЬЗОВАТЬ МОМЕНТ JS ВМЕСТО ДАТЫ

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")
 })

}

0 голосов
/ 26 сентября 2018

Вы должны изучить TTL (время жизни) и частичный индекс :

Начиная с 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 дней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...