如何在时间到期时更改猫鼬入境的状态?

时间:2015-04-09 13:49:33

标签: node.js mongodb datetime express mongoose

当我申请api /user/getItems时,它应该返回状态为expiredactive的所有项目。

Item是我们的mongoose Schema,具有属性

statusexpiryTime

现在,

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

先谢谢。干杯!

1 个答案:

答案 0 :(得分:2)

正如评论中所写,没有理由改变状态。给出这个示例结构

{
  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 } } )