2015-07-02 1 views
1

Я не могу думать о логике для следующей проблемы.Очистка логики данных в MongoDb на основе дат

Рассмотрите, что я хочу хранить данные в мангусте в коллекции под названием пакет, где я могу хранить данные разных пользователей. Я хочу очистить данные, как только достигнут определенный порог (скажем, например, 10 дней). Мы знаем, что Mongoose по умолчанию дает нам поля CreateAt и UpdateAt.

Предположим, что мои данные созданы 22 февраля 2015 года, а текущая дата - 24 февраля 2015. У меня будет номер PurgeData (столбец, используемый для очистки данных), как 2 (разница между двумя датами). Каждый день я хочу изменить значение номера PurgeData, сравнивая разницу между текущей датой и датой CreateAt. Я хочу планировать эту операцию каждый день и удалять данные, достигшие порога, поэтому я сохраняю пространство памяти. Может ли кто-нибудь помочь мне с логикой для этого и планированием мероприятия?

Заранее спасибо

ответ

0

ли на самом деле не пробовал это, но я хотел бы предложить некоторую логику как и график работу с использованием пакета mongo-scheduler где вы первый делать обновления, а затем удалить документы, нарушающие условия PurgeData. Что-то вроде этого (непроверено):

/* 
Scheduler Arguments 

connection - mongodb connections string (i.e.: "mongodb://localhost:27017/scheduler-db") or a mongoose connection object 
options - Options object 
*/ 
var mongoose = require('mongoose'); 
var Scheduler = require('mongo-scheduer'); 
var scheduler = new Scheduler(connection, options); 
var packet = new mongoose.Schema({ 
    CreatedAt : {type : Date, default: Date.now},  
    PurgeData : {type : Number, index : true} 
}); 
var Packet = mongoose.model('Packet', packet); 
var moment = require('moment'); 

//Schedule the event. 

var event = { 
    name: 'purge', 
    collection: 'packet', 
    after: new Date(), 
    cron: "0 15 10 * * ?" //cron string representing a frequency - fire at 10:15am every day 
}; 
scheduler.schedule(event) 

scheduler.on('purge', function(packet, event) { 
    console.log(packet.PurgeData) 

    Packet.find({"PurgeData": {"$lt": 10} }, function (err, packets) {  
     packets.forEach(function (p){ 
      var days_diff = moment().diff(moment(p.CreatedAt), 'days') // using momentjs library 
      Packet.update(
       { 
        "_id": p._id 
       }, 
       { 
        "$set": { 
         PurgeData: days_diff 
        } 
       }, function (err, doc){ 
        console.log(doc); 
      }); 
     }); 
    }); 

    Packet.find({"PurgeData": {"$gte": 10} }, function (err, packets) {  
     packets.forEach(function (p){  
      Packet.remove({ "_id": p._id }, function (err){ 
       handleErr(err); 
      }); 
     }); 
    }); 
}) 
+0

Попробуй и сообщите, если это сработало !!! – shubhamagiwal92

Смежные вопросы