MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb Spring-Data wysyłający zapytania do wielu klas przechowywanych w tej samej kolekcji

To mniej więcej kwestia tego, jak zaprojektować swoje kolekcje. Ponieważ Mongo nie wie nic o typach, musimy dodać dodatkowe metadane, aby móc odróżnić dokumenty od siebie. Dlatego podczas wykonywania zapytań będziesz musiał również dodać te ograniczenia do zapytania. Zauważ, że możesz odwołać się do _class wprowadź klucz przez DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Pomyśleliśmy o dodaniu API do zapytania, aby wyrazić, że tylko chce się pobrać dokumenty danego typu:

mongo.find(new Query(Teacher.class), Teacher.class);

Nadal wydaje się trochę dziwne, że musisz dwukrotnie określić klasę domeny (co ma sens, jeśli chcesz ograniczyć wyniki do dokumentów danego typu, ale mapować je na inną klasę). Poza tym mogliśmy ograniczyć wyniki tylko do dokumentów, które zawierają dokładnie to type, ponieważ typy są przechowywane jako ciągi, a dziedziczenie można zastosować tylko wtedy, gdy klasa została już załadowana. Więc podczas zapytania o dokumenty z typem Person musielibyśmy załadować wszystkie najpierw spróbuj wyszukać typ, sprawdź typ i potencjalnie odrzuć wynik, który jest nieoptymalny ze względu na wydajność.

Inną opcją byłoby przechowywanie wszystkich typów, do których można przypisać klasę (prawie wszystkie interfejsy i nadklasy z wyjątkiem Object być może), ale spowodowałoby to przechowywanie dużej ilości danych. Można do tego z kolei podejść, dodając flagę do @Document adnotacja.

Konkluzja:obecnie nie ma innego sposobu, ale możesz podnieść zgłoszenia JIRA, jeśli masz sugestie, jak można to poprawić.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jakie uprawnienia użytkownika MongoDB są potrzebne, aby dodać użytkownika do nowej/innej bazy danych Mongo?

  2. Mongoose nie aktualizuje mojego dokumentu, jeśli nie mam funkcji zwrotnej

  3. Wkładki zbiorcze Pymongo nie działają

  4. Mongoose tylko do odczytu bez schematu

  5. Jak rozbroić wszystkie pola z wyjątkiem znanego zestawu pól?