2016-02-05 89 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%确定的。

祝您的项目顺利。