Odpowiedzią na takie pytania w MongoDB jest często denormalizacja danych. Jeśli potrzebujesz tylko listy użytkowników w grupie, możesz przechowywać identyfikator użytkownika i nazwę użytkownika w dokumencie grupowym. W pewnym sensie tworzysz strukturę bazy danych zgodnie z wynikiem, który chcesz zobaczyć na ekranie, zamiast próbować umieścić ją w jakimś znormalizowanym formacie.
Oczywiście działałoby to tylko wtedy, gdyby twoja lista grup użytkowników (z nazwami) mieściła się w jednym dokumencie, ale twoje obecne podejście ma również pewne ograniczenia dotyczące maksymalnego rozmiaru grupy.
Innym podejściem byłoby przechowywanie grup, do których należy użytkownik, w tablicy w każdym dokumencie „Użytkownik”. Dodaj indeks do tego pola tablicy, a teraz możesz znaleźć użytkowników według grup. Biorąc pod uwagę, że użytkownik prawdopodobnie należeć będzie do mniejszej liczby grup niż liczba członków w grupie, może to być tutaj najlepsze podejście.
db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});
Ponownie możesz przechowywać nazwę grupy z jej identyfikatorem _id, dzięki czemu możesz natychmiast wyświetlić listę grup, do których należy użytkownik, za pomocą jednej podróży w obie strony. Oczywiście, jeśli zezwolisz na zmianę nazwy grupy, będziesz musiał uruchomić zadanie w tle, aby naprawić wszystkie te kopie nazwy.
Używałbym również wbudowanego generatora identyfikatorów MongoDB zamiast własnego, ma on wiele pożądanych właściwości.