sql >> Database >  >> NoSQL >> MongoDB

MongoDB en Mongoose:geneste array van documentreferentie-ID's

Wat betreft uw eerste vraag:

Je vraagt ​​specifiek om een ​​betere manier om te werken met child-id's die in de parent zijn opgeslagen. Ik ben er vrij zeker van dat er geen betere manier is om hiermee om te gaan, als het dit patroon moet zijn.

Maar dit probleem bestaat ook in relationele databases. Als je je bericht in een relationele database wilt opslaan (met dat patroon), moet je ook eerst de opmerking maken, de ID ophalen en vervolgens de post bijwerken. Toegegeven, u kunt al deze taken in één verzoek verzenden, wat waarschijnlijk efficiënter is dan het gebruik van mangoest, maar het soort werk dat moet worden gedaan is hetzelfde.

Wat betreft uw tweede vraag:

Het voordeel ten opzichte van variant A is dat je bijvoorbeeld de post kunt krijgen en meteen weet hoeveel reacties erop staan, zonder dat de mongodb waarschijnlijk honderden documenten hoeft door te nemen.

Het voordeel ten opzichte van variant B is dat u meer referenties . kunt opslaan opmerkingen in een enkel document (een enkele post), dan geheel opmerkingen, vanwege mongo's 16 MB document-size-limit.

Het nadeel is echter degene die je noemde, dat het inefficiënt is om die structuur te behouden. Ik neem aan dat dit slechts een voorbeeld is om het scenario te laten zien, dus hier is wat ik zou doen:ik zou per geval beslissen wat ik zou gebruiken.

  • Als het document veel wordt gelezen en niet veel wordt geschreven, EN het is onwaarschijnlijk dat het groter wordt dan 16 MB:Sluit het subdocument in. op deze manier kunt u alle gegevens in één enkele zoekopdracht krijgen.

  • Als u moet verwijzen naar het document van meerdere andere documenten EN je gegevens moeten echt consistent zijn, dan heb je geen andere keuze dan ernaar te verwijzen.

  • Als u moet verwijzen naar het document van meerdere andere documenten MAAR gegevensconsistentie is niet zo super belangrijk EN de beperkingen vanaf het eerste bulletpoint zijn van toepassing, sluit vervolgens de subdocumenten in en schrijf code om uw gegevens consistent te houden.

  • Als u moet verwijzen naar het document van meerdere andere documenten, en er wordt veel naar geschreven, maar niet zo vaak gelezen, u kunt er waarschijnlijk beter naar verwijzen, omdat dit gemakkelijker te coderen is, omdat u geen code hoeft te schrijven om dubbele gegevens te synchroniseren.

In dit specifieke geval (post/opmerking) verwijzen naar de ouder van het kind (het kind de ouders laten weten _id ) is waarschijnlijk een goed idee, omdat het gemakkelijker te onderhouden is dan andersom, en het document groter zou kunnen worden dan 16 MB als het rechtstreeks zou worden ingesloten. Als ik zeker zou weten dat het document NIET groter zou zijn dan 16 MB, zou het insluiten ervan beter zijn, omdat het op die manier sneller is om de gegevens op te vragen




  1. Flask laadt de configuratie niet

  2. MongoDB-aggregatievergelijking:group(), $group en MapReduce

  3. Aggregatie in lokale tijdzone in mongodb

  4. Open Redis-poort voor externe verbindingen