sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:Inbäddade användare i kommentarer

Du kan undvika N+1 -problem med hundratals förfrågningar som använder $in -frågor. Tänk på detta:

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 kan du hitta inläggens kommentarer med en $in fråga, och du kan också enkelt hitta alla kommentarer som gjorts av en specifik författare.

Naturligtvis kan du också lagra kommentarerna som en inbäddad array i inlägget och utföra en $in fråga om användarinformationen när du hämtar kommentarerna. På så sätt behöver du inte avnormalisera användarnamn och behöver fortfarande inte hundratals frågor.

Om du väljer att avnormalisera användarnamnen måste du uppdatera alla kommentarer som någonsin gjorts av den användaren när en användare ändrar t.ex. hans namn. Å andra sidan, om sådana operationer inte förekommer särskilt ofta, borde det inte vara en stor sak. Eller kanske är det ännu bättre att lagra namnet som användaren hade när han skrev kommentaren, beroende på dina krav.

Ett allmänt problem med inbäddning är att olika skribenter kommer att skriva till samma objekt , så du måste använda atomic modifiers (som $push ). Detta är ibland svårare att använda med kartläggare (jag kan dock inte mongoalkemi), och generellt mindre flexibelt.



  1. MongoDB:Hur frågar man en tidsserie med ofullständig data?

  2. Deserialiseringsgränssnitt i MongoDB med C# - Okänt diskriminatorvärde

  3. Använda Mongo-aggregation för att beräkna summan av värden

  4. Infoga element i kapslade arrayer i MongoDB