当我申请api /user/getItems
时,它应该返回状态为expired
或active
的所有项目。
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
我们应该如何解决这个问题?在过期事件中应该触发,而不是在每次请求时将expiryTime
与timeNow
进行比较,或者每隔5分钟说一次。
一旦项目
,它应该自动触发事件expiryTime < timeNow
先谢谢。干杯!
答案 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 } } )