MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Spring-Data mongodb прави заявки за множество класове, съхранени в една и съща колекция

Това е повече или по-малко въпрос на това как да проектирате вашите колекции. Тъй като Mongo не знае нищо за типовете, трябва да добавим допълнителни метаданни, за да можем да разграничаваме документите един от друг. Следователно, когато правите заявка, ще трябва да добавите и тези ограничения към заявката. Имайте предвид, че можете да се обърнете към _class ключ чрез DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Мислехме да добавим някакъв API към заявката, за да изразим, че човек иска да получи само документи от даден тип, като това:

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

Все още се чувства малко странно, че трябва да посочите клас на домейн два пъти (което има смисъл, ако искате да ограничите резултатите до документи от даден тип, но да ги картографирате към различен клас). Освен това бихме могли да ограничим резултатите само до документи, които носят точно това тип, тъй като типовете се съхраняват като низове и наследяването може да се приложи само ако класът вече е зареден. Така че, когато правите заявка за документи с тип Person ще трябва да заредим всички документи първо, опитайте да потърсите типа, направете проверката на типа и евентуално изхвърлете резултата, който е под оптималния от съображения за производителност.

Друг вариант би бил да се съхраняват всички типове, към които може да се присвои клас (почти всички интерфейси и суперкласове с изключение на Object може би), но това би довело до съхраняване на доста голямо количество данни. Това от своя страна може да се постигне чрез добавяне на флаг към @Document анотация.

В крайна сметка:в момента няма друг начин освен да събирате билети за JIRA, ако имате предложения как това може да се подобри.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. това ли е оптималната минимална настройка за mongodb, за да позволи шардинг/мащабиране?

  2. MongoDB:премахнете уникалното ограничение

  3. Как да ограничите потребител на mongo да изпуска колекция?

  4. Рамката за агрегиране на MongoDB и Java драйверът правят $or условието да работи

  5. MongoDB множество мастери в ReplicaSet