2014-12-17 3 views
0

나는 게임을하고 최고 기록을 설정할 수있는 사용자가 있으며, 사용자 표시 이름은 언제든지 변경 될 수 있지만 중복은 허용되지 않는 가상 프로젝트에서. SQL 대안보다 더 빠른 개발을 지원하는 것처럼 MongoDB를 사용할 계획입니다. 사용자가 실행할 수있는 게임에는 여러 가지 유형이 있으며, 모두 데이터베이스에 저장해야 할 점수가 있습니다. 높은 점수 목록을 작성할 수 있도록 점수에 대해 점수를 쿼리해야합니다. 나는 이런 식으로 뭔가를 할 수있는 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 | +------+------+-----+

몽고에 대한 상응하는 뭔가가 무엇입니까? 나는 이것을 관계형 데이터베이스와 너무 흡사하게 생각하고 있는가?

+0

GameId는 특정 게임을 말하는 것이므로 각 플레이어와 게임에 대해 가장 높은 점수를 저장하고 있습니까? 플레이어가 특정 게임에서 얻는 모든 점수를 저장하지 않고 그 게임에서 얻은 최고 점수 만 저장하고 있습니까? – wdberkeley

답변

0

사용자, 게임이라는 두 가지 컬렉션이 있어야합니다.

주 : mongodb에서 테이블은 콜렉션으로 호출됩니다. 그러면 mongodb에서 사용자 ID가 자동으로 생성됩니다. 사용자 ID에 특정 필드가 필요하지 않습니다.

게임은 사용자에게 속해 있습니다. 사용자 has_many 게임. Ruby on Rails를 사용하는 코드 스 니펫입니다. usr.games : 당신이 건축의이 종류가있을 때

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

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

, 당신은

아래 USR = User.where ("일부 이름"이름)와 같은 사용자와 관련된 게임을 얻을 수 있도록 데이터베이스를 조회 할 수 있습니다. all => 특정 사용자와 관련된 모든 게임을 반환하십시오.

의심의 여지가 없으므로 언제든지 말씀해주십시오.

0

자주 묻는 질문의 종류에 따라 다릅니다. 예를 들어 모든 쿼리가 사용자와 관련이있는 경우 사용자가 재생 한 모든 게임을 표시하는 것과 같이 스키마를 이와 같이 유지할 수 있습니다. 사용자 컬렉션에는 게임이 하위 문서에 포함 된 이와 같은 문서가 있습니다.

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

하지만 당신은 매우 까다로운 일이 될 것입니다 특정 게임에 득점 왕을 검색하려면이 스키마의 문제는 지금,하지만 우리는

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

       } 
게임이라는 또 다른 컬렉션의 데이터를 복제 할 수 있습니다
관련 문제