Mongoose - 根据日期更新文档字段

时间:2018-04-28 09:56:54

标签: node.js mongoose

在我目前的项目中,我有一个出价模式。出价架构如下所示:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const timestamps = require('mongoose-timestamps');

const BidSchema = new Schema({
  bidder: {
    type: Schema.ObjectId,
    ref: 'Buyer'
  },
  box: {
    type: Schema.ObjectId,
    ref: 'Box'
  },
  status: {
    type: String,
    enum: ['Pending', 'Approved', 'Disapproved']
  },
  bidPrice: Number,
  bidTerms: {
    type: String,
    enum: ['Cash', '30 Days', '60 Days', '90 Days', '120 Days']
  },
  bidTimeout: {
    type: Date,
    default: Date.now
  },
  isAnonymous: Boolean,
});

BidSchema.plugin(timestamps);

module.exports = mongoose.model('Bid', BidSchema);

现在,正如您所看到的,我有一个类型日期的字段bidTimeout,表示出价时间。现在,在此模式中,我还有一个名为status的枚举字段,表示出价的状态(已批准,已拒登,待处理)。出价时的初始状态是待定的。 现在,在我的服务器中,我想对出价执行一些逻辑。我希望如此 我的bidTimeout已经过去的所有出价,我希望此出价的状态为“已拒登”#。

我考虑过执行cron作业或其他任务调度程序,但我想知道是否有更好,更有效的方法来实现这一目标。

1 个答案:

答案 0 :(得分:0)

Cronjobs并不是解决这个问题的最佳方式,因为实施方案不会很好地扩展。

如果您确实需要由于某种原因实时更新状态,则调度程序是实现该状态的更好方法。

但更简单的方法是不去实时。每当从数据库加载任何出价时,检查它是否已过期且处于“待定”状态。如果是,则将状态更改为Disapproved并保存对象。