如何在时间到期时更改猫鼬条目的状态?
How to change status of a mongoose entry on time expiry?
当我请求 api /user/getItems
时,它应该 return 我所有具有状态 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
提前致谢。干杯!
正如评论中已经写的那样,没有理由改变状态。鉴于此示例结构
{
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 } } )
当我请求 api /user/getItems
时,它应该 return 我所有具有状态 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
提前致谢。干杯!
正如评论中已经写的那样,没有理由改变状态。鉴于此示例结构
{
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 } } )