MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB:utenti incorporati nei commenti

Puoi evitare il N+1 -problema di centinaia di richieste utilizzando $in -interrogazioni. Considera questo:

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

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

Ora puoi trovare i commenti ai post con un $in query e puoi anche trovare facilmente tutti i commenti fatti da un autore specifico.

Naturalmente, puoi anche archiviare i commenti come un array incorporato nel post ed eseguire un $in interrogare le informazioni sull'utente quando si recuperano i commenti. In questo modo, non è necessario denormalizzare i nomi utente e non sono comunque necessarie centinaia di query.

Se scegli di denormalizzare i nomi utente, dovrai aggiornare tutti i commenti mai fatti da quell'utente quando un utente cambia, ad es. il suo nome. D'altra parte, se tali operazioni non si verificano molto spesso, non dovrebbe essere un grosso problema. O forse è ancora meglio memorizzare il nome che l'utente aveva quando ha fatto il commento, a seconda delle tue esigenze.

Un problema generale con l'incorporamento è che scrittori diversi scriveranno sullo stesso oggetto , quindi dovrai usare i modificatori atomici (come $push ). Questo a volte è più difficile da usare con i mappatori (non conosco la mongoalchimia) e generalmente meno flessibile.