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

Como fazer consultas aninhadas no MongoDb que funcionam como consultas de seleção Sql aninhadas


A resposta para essas perguntas no MongoDB geralmente é desnormalizar seus dados. Se você precisar apenas de uma lista dos usuários do grupo, você pode armazenar o ID do usuário e o nome de usuário no documento do grupo. De certa forma, você estrutura seu banco de dados de acordo com o resultado que deseja ver na tela, em vez de tentar colocá-lo em algum formato normalizado.

Claramente, isso só funcionaria se sua lista de grupos de usuários (com nomes) couber em um único documento, mas sua abordagem atual também tem algumas limitações em relação ao tamanho máximo de um grupo.

Outra abordagem seria armazenar os grupos aos quais um usuário pertence em uma matriz em cada documento 'Usuário'. Adicione um índice nesse campo de matriz e agora você pode encontrar usuários por grupo. Dado que é provável que um usuário pertença a menos grupos do que membros em um grupo, essa pode ser a melhor abordagem aqui.
db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});

Novamente, você pode armazenar o nome do grupo com seu _id para poder exibir imediatamente a lista de grupos aos quais um usuário pertence com uma única viagem de ida e volta. Claro, se você permitir que um nome de grupo seja alterado, você terá que iniciar uma tarefa em segundo plano para corrigir todas essas cópias do nome.

Eu também usaria o gerador de id do MongoDB embutido em vez do seu próprio, ele tem muitas propriedades desejáveis.