sql >> Database >  >> NoSQL >> MongoDB

Hoe geneste zoekopdrachten in MongoDb te maken die werken als geneste SQL-selectiequery's

Het antwoord op dergelijke vragen in MongoDB is vaak om uw gegevens te denormaliseren. Als u alleen een lijst van de gebruikers in de groep nodig heeft, kunt u de gebruikers-ID en . opslaan de gebruikersnaam in het groepsdocument. In sommige opzichten structureert u uw database op basis van het resultaat dat u op het scherm wilt zien in plaats van te proberen het in een genormaliseerd formaat te plaatsen.

Het is duidelijk dat dat alleen zou werken als uw gebruikersgroeplijst (met namen) in één document past, maar uw huidige aanpak heeft ook enkele beperkingen met betrekking tot de maximale grootte van een groep.

Een andere benadering zou zijn om de groepen waartoe een gebruiker behoort op te slaan in een array op elk 'Gebruiker'-document. Voeg een index toe aan dat matrixveld en nu kunt u gebruikers per groep vinden. Aangezien een gebruiker waarschijnlijk tot minder groepen behoort dan er leden in een groep zijn, is dit misschien de beste benadering.

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

Nogmaals, u kunt de groepsnaam opslaan met zijn _id, zodat u onmiddellijk de lijst met groepen waartoe een gebruiker behoort, kunt weergeven met een enkele rondreis. Als je toestaat dat een groepsnaam wordt gewijzigd, moet je natuurlijk een achtergrondtaak starten om al deze kopieën van de naam op te lossen.

Ik zou ook de ingebouwde MongoDB id-generator gebruiken in plaats van die van jezelf, deze heeft veel wenselijke eigenschappen.



  1. MongoDb-querymatrix met null-waarden

  2. Auditlogboekregistratie voor MongoDB

  3. Hoe kan ik een document voorwaardelijk upsereren in Mongo?

  4. sorteren op ingesloten objectwaarde in Mongodb