如何在时间到期时更改猫鼬条目的状态?

How to change status of a mongoose entry on time expiry?

当我请求 api /user/getItems 时,它应该 return 我所有具有状态 expiredactive.

的项目

Item 是我们的 mongoose Schema 具有属性

status , expiryTime

现在,

var timeNow = moment().toDate();
Item.find({expiryTime: $gte: timeNow})
    .exec(function(err, returnItems){
   //Returns Deals whose expiry Time is larger than the current time.
}

现在我想在

时将 Item 的状态更改为 expired
expiryTime < timeNow

我们应该如何解决这个问题?过期事件应该有一个触发器,而不是在每次请求时将 expiryTimetimeNow 进行比较,或者说每 5 分钟一次。

一旦物品

它应该会自发触发一个事件
expiryTime < timeNow

提前致谢。干杯!

正如评论中已经写的那样,没有理由改变状态。鉴于此示例结构

{
  someField: "Some value!"
  expiryDate: <some ISODate()>
}

您可以使用

轻松找到所有过期的文件
db.collection.find( { expiryDate: { $lt: new ISODate() } } )

以及所有带有

的未过期文件
db.collection.find( { expiryDate: { $gt: new ISODate() } } )

为了保持集合较小或将过期文档移至更合适的集合,您可以在 mongo shell:

中执行此操作
var cut = new ISODate()
db.collection.aggregate(
  [ { $match: { expiryDate: { $lt: cut } } } ],
  { out: "moreAppropriateCollection" }
)
db.collection.remove( { expiryDate: { $lt: cut } } )