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

Spring-Data mongodb consultando várias classes armazenadas na mesma coleção


Esta é mais ou menos uma questão de como projetar suas coleções. Como o Mongo não sabe nada sobre tipos, temos que adicionar os metadados adicionais para poder distinguir os documentos uns dos outros. Assim, ao consultar, você também precisará adicionar essas restrições à consulta. Observe que você pode consultar o _class chave por meio de DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Pensamos em adicionar alguma API à consulta para expressar que apenas deseja obter documentos de um determinado tipo como este:
mongo.find(new Query(Teacher.class), Teacher.class);

Ainda parece um pouco estranho que você tenha que declarar a classe de domínio duas vezes (o que faz sentido se você quiser restringir os resultados a documentos de um determinado tipo, mas mapeá-los em uma classe diferente). Além disso, só poderíamos restringir os resultados a documentos que carregam exatamente isso type pois os tipos são armazenados como Strings e a herança só pode ser aplicada se a classe já tiver sido carregada. Portanto, ao consultar documentos com o tipo Person teríamos que carregar todos documentos primeiro, tente pesquisar o tipo, faça a verificação de tipo e potencialmente jogue fora o resultado que é sub-ótimo por motivos de desempenho.

Outra opção seria armazenar todos os tipos aos quais uma classe pode ser atribuída (praticamente todas as interfaces e superclasses exceto Object talvez), mas isso faria com que uma grande quantidade de dados fosse armazenada. Isso pode ser abordado adicionando um sinalizador ao @Document anotação.

Conclusão:atualmente, não há outra maneira, mas sinta-se à vontade para aumentar os tickets do JIRA se tiver sugestões de como isso pode ser melhorado.