2017-03-26 47 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