La risposta a tali domande in MongoDB è spesso denormalizzare i tuoi dati. Se hai bisogno solo di un elenco degli utenti nel gruppo, puoi memorizzare l'ID utente e il Nome utente nel documento di gruppo. In un certo senso strutturi il tuo database in base al risultato che vuoi vedere sullo schermo piuttosto che provare a metterlo in un formato normalizzato.
Chiaramente funzionerebbe solo se l'elenco dei gruppi di utenti (con nomi) può essere contenuto in un unico documento, ma anche il tuo approccio attuale ha alcune limitazioni riguardanti la dimensione massima di un gruppo.
Un altro approccio sarebbe quello di archiviare i gruppi a cui appartiene un utente in una matrice su ciascun documento "Utente". Aggiungi un indice su quel campo dell'array e ora puoi trovare gli utenti per gruppo. Dato che è probabile che un utente appartenga a meno gruppi rispetto ai membri di un gruppo, questo potrebbe essere l'approccio migliore in questo caso.
db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});
Anche in questo caso potresti memorizzare il nome del gruppo con il suo _id in modo da poter visualizzare immediatamente l'elenco dei gruppi a cui appartiene un utente con un unico viaggio di andata e ritorno. Ovviamente, se consenti la modifica del nome di un gruppo, dovrai avviare un'attività in background per sistemare tutte queste copie del nome.
Userei anche il generatore di ID MongoDB integrato anziché il tuo, ha molte proprietà desiderabili.