根据日期清除 MongoDb 中的数据逻辑
Purging Data Logic in MongoDb based on Dates
我想不出以下问题的逻辑。
考虑一下我想将数据存储在名为 数据包 的集合中的 mongoose 中,我可以在其中存储不同用户的数据。一旦达到某个阈值(例如 10 天),我想清除数据。我们知道 Mongoose 默认为我们提供了 CreatedAt 和 UpdatedAt 字段。
假设我的数据是在 2015 年 2 月 22 日创建的,当前日期是 2 月 24 日 2015.I 将有一个 PurgeData 编号(用于清除数据的列)为 2(两个日期之间的差异)。每天我都想通过比较当前日期和 CreatedAt 日期之间的差异来更改 PurgeData 数字的值。我想每天安排这个操作,删除达到阈值的数据,这样我就可以节省内存space。有人可以帮助我了解它的逻辑和活动安排吗?
提前致谢
还没有实际尝试过,但我会建议一些逻辑,例如使用 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);
});
});
});
})
我想不出以下问题的逻辑。
考虑一下我想将数据存储在名为 数据包 的集合中的 mongoose 中,我可以在其中存储不同用户的数据。一旦达到某个阈值(例如 10 天),我想清除数据。我们知道 Mongoose 默认为我们提供了 CreatedAt 和 UpdatedAt 字段。
假设我的数据是在 2015 年 2 月 22 日创建的,当前日期是 2 月 24 日 2015.I 将有一个 PurgeData 编号(用于清除数据的列)为 2(两个日期之间的差异)。每天我都想通过比较当前日期和 CreatedAt 日期之间的差异来更改 PurgeData 数字的值。我想每天安排这个操作,删除达到阈值的数据,这样我就可以节省内存space。有人可以帮助我了解它的逻辑和活动安排吗?
提前致谢
还没有实际尝试过,但我会建议一些逻辑,例如使用 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);
});
});
});
})