【问题标题】:Mongoose delete by timestamp猫鼬按时间戳删除
【发布时间】:2018-04-10 12:14:27
【问题描述】:

我有我的猫鼬模型:

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

我正在尝试使用此代码删除所有超过 30 天的文档(时间戳字段):

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")
    }
});

我在控制台上看到:“清理完成”,但我仍有所有超过 30 天的文档。

我的代码有问题吗?

【问题讨论】:

  • 你用的是什么版本的猫鼬?
  • 猫鼬版本:^5.0.10
  • 日期是否作为实际时间戳存储在您的数据库中?即:1520699330307。如果是这样,older_than 的值不正确,因为它是日期对象而不是时间戳。做console.log(older_than)并检查一下。
  • 要从日期对象中获取时间戳,可以使用older_than.valueOf()
  • 我已经更新了答案。它对我有用,也可能对你有用

标签: node.js express mongoose mongoose-schema


【解决方案1】:

你最好尝试如下使用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);
})

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2019-12-18
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多