MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como referenciar um documento incorporado no Mongoid?


Como os Mapas são sua própria coleção, você precisaria iterar sobre cada coleção de Mapas procurando o Local ao qual seu Jogador é referenciado.

Você não pode acessar documentos incorporados diretamente. Você tem que entrar através da coleção e ir descendo.

Para evitar iterar todos os mapas, você pode armazenar a referência de localização E a referência de mapa no documento do Player. Isso permite que você encadeie critérios que selecionam seu mapa e, em seguida, a localização dentro dele. Você precisa codificar um método em sua classe Player para lidar com isso.
def location
  self.map.locations.find(self.location_id)
end

Então, semelhante a como você respondeu a si mesmo, exceto que você ainda pode armazenar o location_id no documento do jogador em vez de usar os atributos de coord.

Outra maneira seria colocar Mapas, Locais e Jogadores em suas próprias coleções em vez de incorporar o Local em sua coleção de Mapas. Então você pode usar relacionamentos de referência sem fazer nada extravagante ... no entanto, você está apenas usando um banco de dados hierárquico como se fosse um banco de dados relacional neste momento ...