Tengo un modelo de archivo que hace referencia a un modelo de nota con la nota que hace referencia a un modelo de pregunta.
Un archivo puede tener muchas notas y diferentes notas pueden tener muchas preguntas, ¿cómo puedo consultar un archivo por su ID en MongoDB para devolver todas las preguntas en todas las notas que están en un archivo?
Archivo--->Notas--->Preguntas
const mongoose = require('mongoose'); const { Schema } = mongoose; mongoose.Promise = global.Promise; const fileSchema = new Schema( { title: { type: String, required: [true, 'Please add a title'], trim: true, }, user: { type: mongoose.Schema.ObjectId, ref: 'User', required: true, }, notes: [ { type: mongoose.Schema.ObjectId, ref: 'Note', }, ], }, { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true }, }, ); module.exports = mongoose.model('File', fileSchema); const mongoose = require('mongoose'); const { Schema } = mongoose; mongoose.Promise = global.Promise; const noteSchema = new Schema( { title: { type: String, required: [true, 'Please add a title'], trim: true, }, user: { type: mongoose.Schema.ObjectId, ref: 'User', required: true, }, questions: [ { type: mongoose.Schema.ObjectId, ref: 'Question', }, ], }, { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true }, }, );Esto se parece al ejemplo de Mongoose de Poblar en múltiples niveles
Digamos que tiene un esquema de usuario que realiza un seguimiento de los amigos del usuario.
const userSchema = new Schema({ name: String, friends: [{ type: ObjectId, ref: 'User' }] });Rellenar le permite obtener una lista de los amigos de un usuario, pero ¿qué sucede si también desea conocer los amigos de los amigos de un usuario? Especifique la opción de llenado para indicarle a mongoose que complete la matriz de amigos de todos los amigos del usuario:
User. findOne({ name: 'Val' }). populate({ path: 'friends', // Get friends of friends - populate the 'friends' array for every friend populate: { path: 'friends' } });
En tu caso puede verse así:
File .findById(id) .populate({ path: 'notes', populate: { path: 'questions' } });