Pytanie Spring Data MongoDB: jak wdrożyć "relacje encji"?


Tytuł tego pytania jest dość sprzeczny, ponieważ próbuję implementować relacje w nierelacyjnej bazie danych ... :)

Ale mam na myśli to, jak to zrobić zdefiniuj powiązania między jednostkami w klasach modeli aplikacji pracujących z MongoDB.

Współpracując z JPA często używam @ManyToMany lub @OneToMany adnotacje do definiowania relacji między obiektami. Czy jest coś podobnego w Spring Data MongoDB?

Studiowanie MongoDB Zdałem sobie sprawę, że istnieją dwa możliwe podejścia do stowarzyszenia: Referencje i Wbudowane dane.

Którego używa Spring Data? Czy można skonfigurować tryb powiązania?


16
2018-03-27 15:06


pochodzenie




Odpowiedzi:


Możesz użyć adnotacji @DBRef, aby utwierdzić odwoływaną klasę w osobnym zbiorze, inaczej dokument będzie trwał w tym samym dokumencie (json). Użycie DBRef wymaga dodatkowego zapytania dla sterownika mongodb, powinieneś rozważyć to, aby przeanalizować problemy z wydajnością.

Od wiosenna dokumentacja danych

@DBRef - zastosowany na polu, aby wskazać, że ma być przechowywany za pomocą com.mongodb.DBRef.

7.3.4 Korzystanie z DBRefs Struktura odwzorowania nie musi przechowywać obiektów podrzędnych osadzonych w dokumencie. Możesz także przechowywać je oddzielnie i użyć DBRef do odnoszenia się do tego dokumentu. Gdy obiekt zostanie wczytany z MongoDB, odniesienia te zostaną szybko rozwiązane, a otrzymasz odwzorowany obiekt, który wygląda tak samo, jakby był przechowywany osadzony w twoim głównym dokumencie.


12
2018-03-27 15:21



Uważaj przy @DBRef. Nie będzie można korzystać z prognoz dla dokumentów referencyjnych. To znaczy. docA = {id:1, anotherDoc:DBRef(id:2)} i docB = {id:2, foo:bar}. Teraz możesz użyć projekcji, gdy pytasz docA, ale nie będę się do niego stosować docB. Mam na myśli to, ty żargon zrób coś takiego jak ta projekcja {anotherDoc.foo:0}. To zawsze przyniesie całość docB. - Benjamin M
@ BenjaminM od Mongo 3.4.4 faktycznie mogą wykorzystuj agregacje do tabel przywoływanych "połączonych w lewo" za pomocą wyszukiwania identyfikatorów obiektów i używaj kolejnych rzutowań, aby odfiltrować niechciane rzeczy. Jednak nie jest to wygodne w użyciu - Roman Vottner


Możesz użyć RelMongo ramy pozwalające na implementację relacji poprzez zapewnienie wsparcia adnotacji @OneToMany i @OneToOne.


0
2018-06-14 09:10