设计MongoDB集合与关系方法

时间:2016-02-05 12:57:02

标签: mongodb meteor nosql

我在设计MongoDB集合时遇到了困难,无法满足我的要求。我以前的项目中只使用过SQL数据库,而且对于MongoDB的NoSQL概念还是比较陌生的。我目前获得该概念的学习项目是存储和检索所玩游戏的统计数据(增强的排行榜示例)。在关系数据库中,我将创建以下表:

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中,概念是将相关信息存储在一个集合中,我试图忽略我在过去一年中对关系数据库的处理,并创建了以下集合结构:

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

但是我现在很难计算特定玩家的整体结果。查询为"计算玩家A在游戏B&#34中的总积分。非常复杂,我担心表现非常糟糕。因此,对于这种情况,我仍然更喜欢关系模型。但是,当我想学习NoSQL数据库的概念时,我仍然想知道,我是否只是误解了数据库,并且有一种很好的方法可以在单个集合中为查询构建数据。

任何建议都受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我是MongoDB的新手,最近开始学习,但到目前为止我所知道的是:

NOSQL数据库(如MongoDB)主要用于其可扩展性和灵活性。对于简单和小型项目,我看不到任何好处。

您描述的案例是应该使用SQL的典型案例。

如果我被选中创建该数据库并且我想使用MongoDB,我会这样做: 1)保留为比赛创建的集合 2)根据玩家添加新的收藏。

第二个系列将用于排行榜和基于玩家的所有内容。这意味着会有重复数据,但没有其他方法可以处理玩家搜索,这是您需要为排行榜做的搜索。

如果只保存了最新的比赛,但是我认为没有任何好处,也许它可以奏效。

正如我之前提到的,我也在学习过程中,所以我不是百分百肯定。

祝你的项目好运。

相关问题