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

MongoDB i Mongoose:zagnieżdżona tablica identyfikatorów referencji dokumentów

Odnośnie twojego pierwszego pytania:

Konkretnie prosisz o lepszy sposób pracy z identyfikatorami dziecka przechowywanymi w rodzicu. Jestem prawie pewien, że nie ma lepszego sposobu na poradzenie sobie z tym, jeśli ma to być ten wzór.

Ale ten problem istnieje również w relacyjnych bazach danych. Jeśli chcesz zapisać swój post w relacyjnej bazie danych (przy użyciu tego wzorca), musisz również najpierw utworzyć komentarz, uzyskać jego identyfikator, a następnie zaktualizować post. To prawda, że ​​możesz wysłać wszystkie te zadania w jednym żądaniu, co jest prawdopodobnie bardziej wydajne niż użycie mangusty, ale rodzaj pracy, którą należy wykonać, jest taki sam.

Jeśli chodzi o twoje drugie pytanie:

Zaletą w porównaniu z wariantem A jest to, że możesz na przykład pobrać post i od razu wiedzieć, ile ma komentarzy, bez pytania mongodb o przejrzenie prawdopodobnie setek dokumentów.

Zaletą nad wariantem B jest to, że możesz przechowywać więcej odniesień do komentarzy w jednym dokumencie (pojedynczy post), niż cały komentarze, z powodu mongos 16 MB limitu rozmiaru dokumentu.

Minusem jest jednak ten, o którym wspomniałeś, że utrzymanie tej struktury jest nieefektywne. Zakładam, że jest to tylko przykład do zaprezentowania scenariusza, więc oto co bym zrobił:decydowałbym w każdym przypadku z osobna, czego użyć.

  • Jeśli dokument będzie często czytany, a mało pisany, ORAZ prawdopodobnie nie przekroczy 16 MB:Osadź poddokument. w ten sposób możesz uzyskać wszystkie dane w jednym zapytaniu.

  • Jeśli potrzebujesz odwołać się do dokumentu z wielu inne dokumenty ORAZ Twoje dane naprawdę muszą być spójne, więc nie masz innego wyboru, jak tylko się do nich odnieść.

  • Jeśli potrzebujesz odwołać się do dokumentu z wielu inne dokumenty ALE spójność danych nie jest bardzo ważna ORAZ obowiązują ograniczenia z pierwszego punktu, a następnie osadź poddokumenty i napisz kod, aby zachować spójność danych.

  • Jeśli potrzebujesz odwołać się do dokumentu z wielu inne dokumenty i są one napisane w dużej ilości, ale nie czyta się ich zbyt często, prawdopodobnie lepiej będzie się do nich odwoływać, ponieważ jest to łatwiejsze do zakodowania, ponieważ nie trzeba pisać kodu, aby zsynchronizować zduplikowane dane.

W tym konkretnym przypadku (post/komentarz) odwołujący się do rodzica od dziecka (poinformowanie dziecka o rodzicach _id ) jest prawdopodobnie dobrym pomysłem, ponieważ jest łatwiejszy w utrzymaniu niż na odwrót, a dokument może przekroczyć 16 MB, jeśli został osadzony bezpośrednio. Gdybym miał pewność, że dokument NIE będzie większy niż 16 MB, osadzenie ich byłoby lepsze, ponieważ w ten sposób zapytanie o dane jest szybsze




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. AttributeError:obiekt „krotka” nie ma atrybutu „wstaw”

  2. połączenie z Mongo DB z wersją Mongoose (4.11.0)

  3. Node.js do MongoDB:znajdź według daty

  4. Jak pobrać pliki graficzne z mongodb na stronę html?

  5. MongoDB $isNumber