sql >> Database >  >> NoSQL >> MongoDB

MongoDB:gebruikers ingesloten in opmerkingen

Je kunt de N+1 . vermijden -probleem van honderden verzoeken met behulp van $in -vragen. Overweeg dit:

Post {
  PosterId: ObjectId
  Text: string
  Comments: [ObjectId, ObjectId, ...] // option 1
}

Comment {
  PostId: ObjectId // option 2 (better)
  Created: dateTime,
  AuthorName: string,
  AuthorId: ObjectId,
  Text: string
}

Nu kun je de reacties van de berichten vinden met een $in zoekopdracht, en u kunt ook gemakkelijk alle opmerkingen van een specifieke auteur vinden.

Je kunt de opmerkingen natuurlijk ook opslaan als een ingesloten array in de post en een $in . uitvoeren query op de gebruikersinformatie wanneer u de opmerkingen ophaalt. Op die manier hoeft u gebruikersnamen niet te de-normaliseren en hebt u nog steeds geen honderden zoekopdrachten nodig.

Als u ervoor kiest om de gebruikersnamen te denormaliseren, moet u alle opmerkingen die ooit door die gebruiker zijn gemaakt, bijwerken wanneer een gebruiker b.v. zijn naam. Aan de andere kant, als dergelijke operaties niet vaak voorkomen, zou het geen probleem moeten zijn. Of misschien is het zelfs beter om de naam op te slaan die de gebruiker had toen hij de opmerking maakte, afhankelijk van uw vereisten.

Een algemeen probleem met inbedding is dat verschillende schrijvers schrijven naar hetzelfde object , dus je zult de atoommodifiers moeten gebruiken (zoals $push ). Dit is soms moeilijker te gebruiken met mappers (ik ken mongoalchemie echter niet) en over het algemeen minder flexibel.



  1. Fix "lengtegraad / breedtegraad is buiten de grenzen" in MongoDB bij het maken van een 2dsphere-index

  2. Prestaties van Redis vs Disk in caching-applicatie

  3. Hoe te groeperen op meerdere kolommen en meerdere waarden in mongodb

  4. Mongodb - dubbele velden in $set en $setOnInsert