EDITAR mongoose.model añadido.
Soy bastante nuevo en mongodb y mongoose. No puedo completar libros para autores en mongoose. Alguien me puede ayudar con eso? Aquí está mi código. Eliminé campos innecesarios
const authorSchema = mongoose.Schema({ _id:{ type: String, required: true, unique: true, trim: true }, name: { type: String, required: true, trim: true }, books: [{ type: String, ref: "Book" }] }, {_id:false}) const Author = mongoose.model('Author', authorSchema) module.exports = {Author}Y el esquema de mis libros se ve de la siguiente manera
const bookSchema = mongoose.Schema({ _id:{ type:String, required:true, unique:true, trim: true }, name: { type: String, required: true, trim: true, unique: true }, description:{ type: String, trim: true, default: 'No description specified' }, datePublished: { type: Date, trim: true, default: '01/01/2001' }, author:{ type: String, ref: 'Author', required: true } }, {_id:false}) const Book = mongoose.model('Book', bookSchema) module.exports = {Book}Aquí está la ruta para poblarlos juntos
AuthorRouter.get('/authors/:id', async(req, res)=>{ const authorID = req.params.id try { const author = await Author.findById(authorID) try { const populated = await author.populate({path: 'books.book', select: 'name description -_id'}) console.log(populated); res.status(201).send(populated) } catch (e) { res.status(401).send(`${e}\n Unable to populate categories`) } } catch (error) { res.status(401).send('Unable to find author') } })La salida es la siguiente con una matriz de libros vacía:
{ "_id": "123", "name": "testuser", "books": [], "__v": 0 }Rellenar una matriz de referencias funciona de la misma manera que una única referencia . Simplemente llame al método de llenado en la consulta y se devolverá una matriz de documentos en lugar de los _id originales.
En tu caso sería:
const populated = await author.populate({path: 'books', select: 'name description -_id'});Oye, he modificado tu código, intenta usar este
Este es su archivo de esquema de autor
const Schema = mongoose.Schema; const authorSchema = mongoose.Schema({ _id:{ type: String, required: true, unique: true, trim: true }, name: { type: String, required: true, trim: true }, books: [{ type: Schema.Types.ObjectId, ref: "bookSchema" }] }, {_id:false}) const Author = mongoose.model('Author', authorSchema) module.exports = {Author}Y esta es tu ruta
AuthorRouter.get('/authors/:id', async(req, res)=>{ const authorID = req.params.id try { const author = await Author.findById(authorID) try { const populated = await author.find().populate('books'); console.log(populated); res.status(201).send(populated) } catch (e) { res.status(401).send(`${e}\n Unable to populate categories`) } } catch (error) { res.status(401).send('Unable to find author') } })