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

Projektowanie relacji wiele-do-wielu w MongoDB (zamiast tabel relacyjnych)

Jest to przypadek posiadania danych w relacji wiele-do-wielu. Myślę, że w Twojej bazie danych jest kilka tysięcy studentów i kilkaset kursów.

Na początek mogę użyć następującego projektu ze szczegółami kursu osadzonymi w każdym uczniu jako tablica dokumentów podrzędnych o nazwie courses .

- students collection
id:
name:
courses: [ { id: 1, name: },  { id: 5, name: }, ... ]

- courses collection
id:
name:
description:

Uwaga, identyfikator i nazwa kursu są przechowywane w obu kolekcjach. To jest powielanie danych. To powinno być w porządku, ponieważ zduplikowane szczegóły nie zmieniają się często (lub mogą wcale się nie zmieniać).

Zapytanie o wszystkie kursy, na które student jest zapisany, na przykład:db.students.find( { name: "John" } ) . Spowoduje to zwrócenie jednego dokumentu ucznia z pasującą nazwą i wszystkimi kursami (pole tablicy). Zobacz db.collection.find .

Zapytaj wszystkich studentów zapisanych na konkretny kurs:db.students.find( { "courses.name": "Java Programming" } ) . Spowoduje to zwrócenie wszystkich dokumentów studentów, których nazwa kursu odpowiada kryteriom „Programowanie java”. Zobacz Zapytanie o tablicę osadzonych dokumentów .

Ponadto możesz użyć rzutowania wykluczać i uwzględniać pola z wyniku.

UWAGI:

  • Informacje o uczniach można umieszczać w kolekcji kursów, zamiast kursów w uczniach. Zapytania będą podobne do powyższych, ale będziesz odpytywać kolekcję kursów. To zależy od twojego przypadku użycia.
  • Możesz po prostu zapisać pole identyfikatora kursu w tablicy kursów w kolekcji studentów; tak jest w przypadku, gdy pole nazwy kursu często się zmienia. Zapytania będą używać agregacji $lookup (operacja „dołącz”), aby pobrać kurs i kolekcję kursów.
  • Informacje o projektowaniu modelu danych dla danych MongoDB opartych na dokumentach.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoError:ns nie znaleziono podczas próby usunięcia kolekcji

  2. Nie można zaparzyć zainstalować mongodb na Mac OS 10.12

  3. Mongodb znajduje się wewnątrz tablicy podrzędnej

  4. Częściowa aktualizacja poddokumentu za pomocą nodejs/mongoose

  5. Zagregowany wynik MongoDB z dwoma różnymi kluczami