2016-02-05 74 views
3

我在設計我的MongoDB集合時遇到困難,無法滿足我的要求。我在以前的項目中只使用過SQL數據庫,而對於MongoDB的NoSQL概念則相當陌生。我目前的學習項目是爲了存儲和檢索所玩遊戲的統計數據(增強型排行榜示例)。在關係數據庫中我將​​創建下列表格:設計MongoDB集合vs關係方法

Matches 
:_id 
:game_id (reference to the type of game played) 
:startedAt 
:endedAt 

Results 
:match_id 
:player_id (reference to the users collection) 
:field_id 
:value 

一場比賽可以有n個球員,每個人都可以有n個結果。根據遊戲的類型,需要爲每個玩家輸入由field_id指示的多個結果值(例如,點數和用戶是否勝利 - >兩個字段=結果表中的兩行)。 我的理解是MongoDB中的概念是相關的信息存儲在一個集合我試圖忽視我所做的與關係DBS在過去的一年裏,創造了以下收集結構:

Matches 
:_id 
:game_id 
:startedAt 
:endedAt 
:players [{ 
    :player_id 
    :results [{ 
     :field_id 
     :value 
    }] 
}] 

但是我現在有困難來計算特定玩家的整體結果。查詢爲「計算玩家A在遊戲B中得分的總數」非常複雜,我擔心表現非常糟糕。因此,我仍然更喜歡這種情況下的關係模型。但是,由於我想了解NoSQL數據庫的概念,我仍然想知道,我是否誤解了數據庫,並且在查詢的單個集合中有數據結構的好方法。

任何建議,非常感謝。

回答

1

我是新來的MongoDB,最近開始學習,但這裏是我目前所知:

NOSQL數據庫,如MongoDB的,主要用於其可擴展性和靈活性。對於簡單和小型項目,我沒有看到好處。

您描述的情況是應該使用SQL的經典案例。

如果我選擇了創建數據庫,我不得不使用MongoDB的,我會做這種方式: 1)保持你的比賽和 2)添加一個基於玩家一個新的集合創建的集合。

第二集合將用於排行榜和所有基於玩家的遊戲。這意味着會有重複的數據,但是沒有其他方式可以處理玩家搜索,您需要爲排行榜進行搜索。

也許它可以工作,如果只有最新的比賽被保存,但我仍然沒有看到任何好處。

正如我前面提到的,我也在學習過程中,所以我不是100%確定的。

祝您的項目順利。