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

MongoDB – czy mój dokument użytkownika powinien zawierać listę identyfikatorów projektów?

user może mieć wiele projects (a projekt jest powiązany tylko z jednym użytkownikiem). To jest jeden do wielu związek.


Każdy user powinien przechowywać listę swoich projects . Na przykład:

user:
    id: <some value>,
    name: <some value>,
    email: <some value>,
    projects: [
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
         ...
    ]

Zwróć uwagę, że każdy project jest dokumentem podrzędnym (obiektem lub osadzonym dokumentem) w ramach projects szyk. project ma powiązane szczegóły, takie jak projectId , projectName itp.


Myślę, że powinna być tylko jedna kolekcja nazywana jako user_projects . Zakładając, że:(i) user może mieć od 0 do 100 projektów i (ii) project szczegóły nie są zbyt duże.

Jest to model osadzania strony „wielu” relacji 1 do N w stronę „jednego”. To zalecany sposób, denormalizujący dane. Ma to zaletę wydajnych i szybkich zapytań. Upraszcza to transakcje, ponieważ zapisy (wstawienia, aktualizacje i usunięcia) będą niepodzielne przy pojedynczej operacji na dokumencie w tej samej kolekcji.


Będziesz używać user id lub name (z unikalnym indeksem), aby pobrać dokument i będzie to bardzo szybkie zapytanie. Możesz mieć indeks w projects tablica (indeksy w polach tablicy są nazywane indeksami wielokluczowymi ) - na polach projektu. Na przykład indeks na projectId lub/i projectName ma sens.

Możesz pobrać wszystkie projekty dla użytkownika - to proste zapytanie za pomocą user id / name . Zapytanie projekcja zezwala na jakie informacje związane z project jest wyświetlany. Możesz użyć find lub aggregate metoda budowania zapytania.Możesz zapytać o konkretny project dla user , używając projectId lub projectName . Ponieważ istnieją indeksy dla user i project pola, będzie to skuteczne zapytanie.

Tak więc radzę mieć jedną kolekcję, user_projects , z user informacje i projects informacje w nim zawarte.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak skonfigurować Embedded MongDB do testowania integracji w aplikacji Spring Boot?

  2. 3 sposoby tworzenia indeksu w MongoDB

  3. Grupuj i licz w MongoDB

  4. Jak skonfigurować SELinux dla zestawów replik MongoDB?

  5. Uzyskiwanie uniksowego znacznika czasu w sekundach z MongoDB ISODate podczas agregacji