2017-03-26 126 views
-2

比方说,我正在制作一个游戏大厅,我想要一个包含打开/关闭状态(布尔型)的“房间”文档。我想在我的数据库中存储这个大厅是开放注册的,直到比赛日前24小时。在比赛日前24小时,我会将数据库中的房间文件标记为关闭注册,并且不会在搜索中显示给用户。根据时间更新mongo文档

如何在比赛日前24小时更新mongo中的字段?我也希望解决方案能够处理服务器重新启动。我通过node.js和mongoose连接到mongodb。

我正在aws ebs上运行该应用程序,并且db将在另一个服务上运行。

+0

只是检查是否登记的时间是提前24小时,如果现在不允许注册 – georoot

+0

@georoot我不知道像这样的一个解决方案的性能影响,我不是才刚刚使用的值阻止注册,而且在查询中筛选出未打开的注册。没有比总是检查更好的解决方案吗? – TheUberUser

+0

不,但如果你想获得更好的性能,你可以使用内存缓存来防止调用数据库来检查截止日期 – georoot

回答

1

一个以上回答的困难是你写的必要性:“我也想解决能够处理服务器重新启动。”直到这一点,您可以使用缓存来处理状态,而不必一直处理从集合中读取数据。另外我不清楚,如果你正在关闭一个基于字段参数的整个集合,或关闭一个字段?不清楚您提供的信息。

不过,如果你已经正确安装蒙戈作为服务的服务器上,然后已经蒙戈将重新启动服务器重新启动时。 (你是什么类型的服务器上要么没有提到。)

可能性#1: 的NPM缓存将会消失服务器重新启动,所以你不能依靠这一点。你需要做的是创建一个字段或sep。收集,在那里简单地说,你会更新一次是24小时前。您将不得不运行一个函数(cron job?)来关闭注册并将字段放入集合中,该集合将设置为布尔值(只是一个建议),如下所示:

{“allowsignups”:true/false possibilities}

我不使用猫鼬,但它会处理架构中的上述。本机也将被正确处理。

除非你使用Redis的,然后拿着它,因为你的服务器重新启动缓存也无济于事。

可能性#2: 保存在磁盘上包含的参数注册允许或不允许一个简单的JSON文件。有一个例程可以检查某人开启的时间,如果JSON文件的allowedsignups设置为false则不允许或显示它。这在Node中是一个简单的fs,也可以在服务器重新启动后存活。它不涉及对数据库的任何读/写操作,也不会使数据库模式复杂化。你可以使用JSON文件来获得多个游戏和更多参数。

您的选择。

希望这会有所帮助。

+0

嘿,我只是想要翻转一个布尔值来跟踪它是否打开注册在房间文件里面比赛时间为24小时。我在aws的elastic beanstalk上运行我的节点js应用程序。mongo db将托管在另一个服务上。我也在考虑一种文件方法,并在服务器启动时对值进行任何更新时将其加载到内存缓存中。感谢非常详细的回应。 – TheUberUser