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

Jak tworzyć zagnieżdżone zapytania w MongoDb, które działają jak zagnieżdżone zapytania wybierające Sql?

Odpowiedzią na takie pytania w MongoDB jest często denormalizacja danych. Jeśli potrzebujesz tylko listy użytkowników w grupie, możesz przechowywać identyfikator użytkownika i nazwę użytkownika w dokumencie grupowym. W pewnym sensie tworzysz strukturę bazy danych zgodnie z wynikiem, który chcesz zobaczyć na ekranie, zamiast próbować umieścić ją w jakimś znormalizowanym formacie.

Oczywiście działałoby to tylko wtedy, gdyby twoja lista grup użytkowników (z nazwami) mieściła się w jednym dokumencie, ale twoje obecne podejście ma również pewne ograniczenia dotyczące maksymalnego rozmiaru grupy.

Innym podejściem byłoby przechowywanie grup, do których należy użytkownik, w tablicy w każdym dokumencie „Użytkownik”. Dodaj indeks do tego pola tablicy, a teraz możesz znaleźć użytkowników według grup. Biorąc pod uwagę, że użytkownik prawdopodobnie należeć będzie do mniejszej liczby grup niż liczba członków w grupie, może to być tutaj najlepsze podejście.

db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});

Ponownie możesz przechowywać nazwę grupy z jej identyfikatorem _id, dzięki czemu możesz natychmiast wyświetlić listę grup, do których należy użytkownik, za pomocą jednej podróży w obie strony. Oczywiście, jeśli zezwolisz na zmianę nazwy grupy, będziesz musiał uruchomić zadanie w tle, aby naprawić wszystkie te kopie nazwy.

Używałbym również wbudowanego generatora identyfikatorów MongoDB zamiast własnego, ma on wiele pożądanych właściwości.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wyszukiwać różne wartości w Mongoose?

  2. Jak I i NIE w wyszukiwaniu $text w MongoDB

  3. Zalecany sposób/miejsce tworzenia indeksu w kolekcji MongoDB dla aplikacji internetowej

  4. Częściowe indeksy w mongodb / mangusta

  5. Zakres paginacji podczas zapytań i sortowania dynamicznych, nieunikatowych pól w mongodb