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

标签 node.js mongodb mongoose mongoose-populate

我无法想到以下问题的逻辑。

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

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

提前致谢

最佳答案

实际上还没有尝试过这个,但我会建议一些逻辑,例如使用 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);
            });
        }); 
    });
})

关于node.js - MongoDb中基于日期的数据清除逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31186578/

相关文章:

javascript - 如何在新行中将 JS 对象推送到 JSON?

javascript - Discord.js setGame() 不再工作

mongodb - 如何等待副本追上主副本

node.js - MongoDB 在数据库中查找一个对象并更新其字段

Node.js Mongoosejs Crud 脚手架

javascript - Mongoose 增量值不起作用

javascript - 在 Node js 中将字符串转换为 JSON?

arrays - 如何在 $lookup 之后反转 $unwind 或重新组装?

node.js - Mongoose - this.find() 不存在

node.js - 无法使用 npm 安装 Bower