【问题标题】:Mongoose - update document field based on a dateMongoose - 根据日期更新文档字段
【发布时间】:2018-10-09 01:19:39
【问题描述】:

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

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

现在,如您所见,我有一个类型为 date 的字段 bidTimeout,表示竞价超时。现在,在这个模式中,我还有一个名为 status 的枚举字段,它表示投标的状态(已批准、未批准、待定)。出价在创建时的初始状态为待定。 现在,在我的服务器中,我想对出价执行一些逻辑。我想要那个 其bidTimeout 已过的每个出价,我都希望此出价的状态为“未获批准”。

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

【问题讨论】:

  • 是的,cronjob 是在竞标超时时自动更新结果的更好方法。但除此之外你还有什么特殊要求吗?

标签: node.js mongoose


【解决方案1】:

Cronjobs 不是解决此问题的最佳方法,因为实施不会很好地扩展。

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

但更简单的方法是不实时运行。每当从数据库加载任何投标时,检查它是否已过期并处于待处理状态。如果是,则将状态更改为未批准并保存对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2021-11-10
    • 2020-04-04
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多