实施一段时间后过期的帖子的最佳方法是什么?
what is the best way to implement posts that expire after a period of time?
我正在开发一个 React Native & MongoDB 项目,该项目的帖子在创建后 7 天后过期。然后将状态更改为已过期。
我目前正在考虑在每天开始时检查即将过期的帖子,然后通知用户,但我如何在它过期的确切时刻将状态更改为已过期?
编辑:
对于未来的人,我就是这样做的:)
const watchForExpired = () => {
let interval = setInterval(async () => {
let dateBeforeSevenDays = new Date();
dateBeforeSevenDays.setDate(dateBeforeSevenDays.getDate() - 7);
const listings = await Listing.find({
$and: [
{
creationTime: { $lte: dateBeforeSevenDays },
},
{
status: "approved",
},
],
});
if (listings.length === 0) return;
const updateQuery = await Listing.updateMany(
{ _id: { $in: listings.map(({ _id }) => _id) } },
{ $set: { status: "expired" } },
{ multi: true }
);
}, 60000);
};
因为你的 posts 有 creationTime 作为属性,我会每隔一分钟左右获取一次当前时间,然后检查 creationTime + 7 天是否小于当前时间,如果是,删除post。如果你确实在确切的时间需要它,你可能会遇到很多 post 的性能问题,因为你可能必须实现多个计时器,而且它们真的很重。
我正在开发一个 React Native & MongoDB 项目,该项目的帖子在创建后 7 天后过期。然后将状态更改为已过期。
我目前正在考虑在每天开始时检查即将过期的帖子,然后通知用户,但我如何在它过期的确切时刻将状态更改为已过期?
编辑:
对于未来的人,我就是这样做的:)
const watchForExpired = () => {
let interval = setInterval(async () => {
let dateBeforeSevenDays = new Date();
dateBeforeSevenDays.setDate(dateBeforeSevenDays.getDate() - 7);
const listings = await Listing.find({
$and: [
{
creationTime: { $lte: dateBeforeSevenDays },
},
{
status: "approved",
},
],
});
if (listings.length === 0) return;
const updateQuery = await Listing.updateMany(
{ _id: { $in: listings.map(({ _id }) => _id) } },
{ $set: { status: "expired" } },
{ multi: true }
);
}, 60000);
};
因为你的 posts 有 creationTime 作为属性,我会每隔一分钟左右获取一次当前时间,然后检查 creationTime + 7 天是否小于当前时间,如果是,删除post。如果你确实在确切的时间需要它,你可能会遇到很多 post 的性能问题,因为你可能必须实现多个计时器,而且它们真的很重。