Search code examples
node.jsexpressmongoosemongoose-schema

Mongoose delete by timestamp


I have my mongoose model:

LogSchema = new Schema({
    level : String,
    code: String,
    message: String,
    Timestamp : { 
      type : Date, 
      default: Date.now 
    }
})

I'm trying to delete all documents older than 30 days (Timestamp field) using this code:

var d = new Date();
var older_than = new Date(d.setDate(d.getDate() - 30));
Log.remove({ Timestamp : {$lte : older_than } }, function(err) {
    if (!err) {
        console.log("Clean complete")
    } else {
        console.log("Clean error")
    }
});

I see on console: "Clean complete", but I still have all documents older than 30 days.

Something wrong in my code?


Solution

  • Better you try as below using moment.js

    var moment = require('moment');
    var older_than = moment().subtract(30, 'days').toDate();
    Log.find({ Timestamp: { $lte: older_than } }).remove().exec().then((RemoveStatus) => {
        console.log("Documents Removed Successfully");
    }).catch((err) => {
        console.error('something error');
        console.error(err);
    })