搜索与更改用户名相关的数据

时间:2014-12-17 05:46:18

标签: mongodb

在我正在开展的假设项目中,有些用户可以玩游戏并设置高分,用户显示名称可以随时更改,但不允许重复。我计划使用MongoDB,因为它似乎支持比SQL替代品更快的开发。用户可以玩许多类型的游戏,所有游戏都有某种需要存储在数据库中的分数。然后需要对分数进行分数查询,以便建立高分数列表。来自SQL我可以这样做:

+------+-----------+ |UserID|DisplayName| +------------------+ |883 |John02 | |2321 |James55 | |22 |Sam | |943 |Joe | +------+-----------+ +------+------+-----+ |GameID|UserID|Score| +-------------------+ |1 |883 |9001 | |3 |2321 |2 | |2 |22 |1337 | |2 |943 |998 | +------+------+-----+

什么是Mongo的等价物?我是否像关系数据库那样考虑这个问题?

2 个答案:

答案 0 :(得分:0)

你需要有两个馆藏,即用户,游戏。

注意:在mongodb中,表被称为集合。然后,将在mongodb中自动生成用户ID。您不需要用户ID的特定字段。

游戏属于用户。和用户has_many游戏。下面是在rails上使用ruby的代码片段。

class User 
...
field :name
has_many :games
end

class Games
...
field :score
belongs_to :User
end

当您拥有这种架构时,您可以查询您的数据库以获取与用户相关的游戏,如下所示

usr = User.where(name:“some name”) usr.games.all =>返回与特定用户关联的所有游戏

任何疑问,请随时发表评论。

答案 1 :(得分:0)

这完全取决于您经常要进行的查询。例如,如果您的所有查询都与用户相关联,比如显示用户所播放的所有游戏,您可以保持这样的架构,用户集合将具有这样的文档,其中Games是嵌入子文档。

               {
                   Id : "",
                   Name : "Test Name",
                   Games : [{ Id : 1 , Score : 1234 } , { Id : 2 , Score : 3456}]
               }

但是这个架构的问题在于,现在如果你想搜索某个游戏最佳射手,那将会非常棘手,但我们可以在另一个名为Game的集合中复制数据

              {
                  Id : 123,
                  Scores : [{ User : "Test" ,  Score : 5678} , { User : "Hello" , Score : 3456                      }],Top Scorer : [{}]

              }