Ponieważ mapy są osobną kolekcją, trzeba będzie przeszukiwać każdą kolekcję map w obrębie tej lokalizacji, do której odnosi się Twój odtwarzacz.
Nie masz bezpośredniego dostępu do osadzonych dokumentów. Musisz przejść przez kolekcję i zejść w dół.
Aby uniknąć iteracji wszystkich map, możesz przechowywać zarówno odniesienie do lokalizacji, jak i odniesienie do mapy w dokumencie odtwarzacza. Pozwala to na łączenie kryteriów, które wybierają mapę, a następnie lokalizację na niej. Aby to obsłużyć, musisz zakodować metodę w swojej klasie Player.
def location
self.map.locations.find(self.location_id)
end
Tak więc, podobnie jak sam odpowiedziałeś, z tym wyjątkiem, że nadal możesz przechowywać identyfikator lokalizacji w dokumencie odtwarzacza zamiast używać atrybutów współrzędnych.
Innym sposobem byłoby umieszczenie Map, Lokacji i Graczy w ich własnych kolekcjach zamiast osadzania Lokacji w swojej kolekcji Map. Wtedy możesz użyć relacji referencyjnych bez robienia niczego wymyślnego ... jednak tak naprawdę tylko używasz hierarchicznej bazy danych, lubi to w tym momencie jest relacyjną bazą danych ...