Node.js 基于日期清除MongoDb中的数据逻辑

Node.js 基于日期清除MongoDb中的数据逻辑,node.js,mongodb,mongoose,mongoose-populate,Node.js,Mongodb,Mongoose,Mongoose Populate,我想不出以下问题的逻辑 假设我想将数据存储在mongoose中的一个名为packet的集合中,在这个集合中我可以存储不同用户的数据。我希望在达到某个阈值(例如10天)后清除数据。我们知道Mongoose默认为我们提供CreatedAt和UpdatedAt字段 假设我的数据创建于2015年2月22日,当前日期为2015年2月24日。我的PurgeData编号(用于清除数据的列)为2(两个日期之间的差值)。每天我都想通过比较当前日期和CreatedAt日期之间的差异来更改PurgeData编号的值。

我想不出以下问题的逻辑

假设我想将数据存储在mongoose中的一个名为packet的集合中,在这个集合中我可以存储不同用户的数据。我希望在达到某个阈值(例如10天)后清除数据。我们知道Mongoose默认为我们提供CreatedAt和UpdatedAt字段

假设我的数据创建于2015年2月22日,当前日期为2015年2月24日。我的PurgeData编号(用于清除数据的列)为2(两个日期之间的差值)。每天我都想通过比较当前日期和CreatedAt日期之间的差异来更改PurgeData编号的值。我希望每天安排此操作并删除已达到阈值的数据,以便节省内存空间。有人能帮我弄清楚这件事的逻辑和日程安排吗


提前感谢

实际上没有尝试过这一点,但我建议使用一些逻辑,比如使用包安排作业,首先进行更新,然后删除违反PurgeData条件的文档。类似这样(未经测试):


实际上我还没有尝试过这一点,但我建议使用一些逻辑,比如使用包安排一个作业,首先进行更新,然后删除违反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);
            });
        }); 
    });
})