javascript - 过期后设置字段(MongoDB)

标签 javascript arrays mongodb mongoose time

我有一个小型数据库结构:

export const ApplicationSchema = new Schema({
  ownerId: String,
  ownerName: String,
  region: String,
  fromAddress: String,
  phone: String,
  cameAddress: String,
  status: {
    type: String,
    enum: ['new', 'booked', 'completed'],
    default: 'new'
  },
})

我需要更改“状态”,24 小时后,状态应等于“已预订”,如何执行此操作?

最佳答案

MongoDB 有一个名为计划触发器的工具,它可以让您做到这一点: https://docs.mongodb.com/stitch/triggers/scheduled-triggers/

但是,对于您的问题来说,这将是一个复杂而繁重的解决方案。您可以使用“createdAt”字段执行某些操作,并为您的当前状态创建一个虚拟字段:

export const ApplicationSchema = new Schema({
  ownerId: String,
  ownerName: String,
  region: String,
  fromAddress: String,
  phone: String,
  cameAddress: String,
  createdAt: Date,
  status: {
    type: String,
    enum: ['new', 'booked', 'completed'],
    default: 'new'
  },
  toJSON: { virtuals: true }
})

ApplicationSchema.virtual('status.current')
  .get(function () {
    // subtracting and checking if it's been a day in milliseconds
    if ((Date.now() - +new Date(this.createdAt)) >= 86400000) {
      return 'completed'
    }

    return this.status
  })

您必须使用 status.current 而不是 status 检查您的状态。 检查这里( https://mongoosejs.com/docs/2.7.x/docs/virtuals.html )以了解有关虚拟场的更多信息。

关于javascript - 过期后设置字段(MongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414545/

相关文章:

mongodb - 获取集合之间的差异非空的项目

javascript - 加载后重定向到页面并显示进度条

javascript - 通过获取父级的 "this"属性来推送具有删除自身的对象的数组

javascript - 文档模板 : JavaScript as replacement for Word?

javascript - jquery 将 li 元素添加到数组

c - 结构体入口声明了一个数组类型的字段,但编译器说它是一个指针

c# - 无法在 MongoDb 集合查询中将 ObjectId 反序列化为 String

javascript - MongoDB with Mongoose - 仅查找某些子文档

c# - 在 C# 应用程序中执行 JavaScript 函数

javascript - Twitter Bootstrap TypeAhead 与具有自动完成功能的下拉列表/选择标签一样工作