gpt4 book ai didi

node.js - 定时器删除记录+一个条件

转载 作者:搜寻专家 更新时间:2023-10-30 23:43:49 24 4
gpt4 key购买 nike

我的程序是一个在线游戏。我创建了一个包含玩家的游戏对象。如果没有其他玩家(除了创建游戏的人)加入游戏,我想在 3 小时后删除游戏记录。我可以计算玩家数,我知道 mongodb TTL,但我如何设置一个仅在没有多个玩家时触发的 TTL?

最佳答案

使用 TTL 索引的基础是,在从索引字段中记录的时间起经过指定的秒数后,文档将被删除。可能不太明显的是,尽管 documentation examples使用名为“createdAt”的字段,这并不意味着这是您唯一的限制,因为日期字段可以更新。

例如,如果您创建一个文档并给它一个“updatedAt”字段,您会在创建游戏时填充该字段,然后提供索引定义:

db.games.createIndex({ "updatedAt": 1 },{ "expireAfterSeconds": 10800 })

然后您真正需要做的就是在新玩家加入游戏时“更新”该值,或者有一些其他操作可以使游戏保持“有效”:

db.games.update(
{ "_id": gameId },
{
"$push": { "players": newPlayer },
"$currentDate": { "updatedAt": true }
}
)

或者改变分数:

db.games.update(
{ "_id": gameId },
{
"$inc": { "score": 20 },
"$currentDate": { "updatedAt": true }
}
)

同时使用 $currentDate运算符,如果您选择的话。

因此,TTL 索引的“过期日期”并未“设置”,它仅在检查“当前时间”并删除 TTL 索引的索引字段早于当前时间的任何数据的过程中起作用“减去”索引上设置的到期秒数。

简而言之,创建索引并不断更新字段以使文档保持最新。随着情况的变化,玩家加入或离开会更新该领域。

关于node.js - 定时器删除记录+一个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31679753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com