que tienen dos colecciones:Mongoose: populate()/DBref o duplicación de datos?
- Usuarios
- Cargas
Cada carga tiene un User
asociado a él y necesito saber sus datos cuando un Upload
se ve. ¿Es una mejor práctica duplicar estos datos dentro del registro de Cargas, o usar populate() para obtener estos detalles de la colección de Usuarios a la que hace referencia el _id
?
OPCIÓN 1
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
_user: { type: Schema.ObjectId, ref: 'users'},
title: { type: String },
});
OPCIÓN 2
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
user: {
name: { type: String },
email: { type: String },
avatar: { type: String },
//...etc
},
title: { type: String },
});
Con 'Opción 2' si alguno de los datos en los Users
cambios de recogida que tendrá para actualizar esto a través de l registros asociados Upload
. Con la "Opción 1", por otro lado, puedo relajarme y dejar que populate()
asegure que siempre se muestren los últimos datos de usuario.
¿Es importante la sobrecarga de usar populate()
? ¿Cuál es la mejor práctica en este escenario común?
Entonces, ¿cómo se puede actualizar la fecha duplicada? En el ejemplo de blogging, si estamos duplicando, procedemos de la información de los usuarios (por ejemplo, nombre) en el registro de comentarios de Quick Quaries. Si ese usuario cambia su nombre, debemos actualizar cada instancia de su nombre en la base de datos, en este caso, cada comentario que hayan realizado. – wilsonpage
necesita preguntarse, ¿cuántas veces cambiará su nombre de usuario? tal vez una actualización masiva lo haga en su caso, o simplemente haga un ObjectId al documento del usuario. La incrustación de objetos es una opción, no un mongodb dojo. – kilianc