una tablas tabla recorrer obtener llenar filas editar dinamicas datos con agregar javascript node.js mongodb mongoose

javascript - tablas - Mangosta, poblar, sub-sub, documento



recorrer tabla javascript (3)

Como un ejemplo completo de llamadas pobladas en los objetos de resultados:

Item.find({}).populate("comments").exec(function(err,data) { if (err) return handleError(err); async.forEach(data,function(item,callback) { User.populate(item.comments,{ "path": "user" },function(err,output) { if (err) throw err; // or do something callback(); }); }, function(err) { res.json(data); }); });

La llamada a .populate() en el formulario invocado desde el modelo toma un documento o una matriz como primer argumento. Por lo tanto, recorre los resultados devueltos para cada elemento y la llamada se completa de esta manera en cada matriz de "comentarios". La "ruta" le dice a la función qué coincide.

Esto se hace usando la versión "asíncrona" de forEach, por lo que no es bloqueante, pero generalmente después de toda la manipulación, todos los elementos de la respuesta no solo se rellenan con comentarios, sino que los comentarios tienen los detalles de "usuario" relacionados.

Tengo esta configuración en mi MongoDB

Artículos:

title: String comments: [] // of objectId''s

Comentarios:

user: ObjectId() item: ObjectId() comment: String

Aquí está mi esquema de Mongoose:

itemSchema = mongoose.Schema({ title: String, comments: [{ type: Schema.Types.ObjectId, ref: ''comments'' }], }); Item = mongoose.model(''items'', itemSchema); commentSchema = mongoose.Schema({ comment: String, user: { type: Schema.Types.ObjectId, ref: ''users'' }, }); Comment = mongoose.model(''comments'', commentSchema);

Aquí es donde consigo mis artículos junto con los comentarios:

Item.find({}).populate(''comments'').exec(function(err, data){ if (err) return handleError(err); res.json(data); });

¿Cómo lleno la matriz de comentarios con su usuario respectivo? Como cada comentario tiene un usuario ObjectId ()?


Más simple

Item .find({}) .populate({ path: ''comments.user'', model: ''users'' } }) .exec(function(err, data){ if (err) return handleError(err); res.json(data); });


Una forma más (más fácil) de hacer esto:

Item .find({}) .populate({ path: ''comments'', populate: { path: ''user'', model: ''users'' } }) .exec(function(err, data){ if (err) return handleError(err); res.json(data); });