Вы пытаетесь заполнить категорию поля, так как она имеет отношение в схеме с категорией коллекции, вам нужно просто заполнить категорию поля, а не коллекцию.
Добавьте это к своим моделям:
let categorySchema = new Schema({
name: String,
posts: [{ type: Schema.Types.ObjectId, ref: 'Post' }]
})
categorySchema.set('toJSON', {virtuals: true})
module.exports = mongoose.model('Category', categorySchema)
let postSchema = new Schema({
title: String,
content: String,
date: String,
category: {type: Schema.Types.ObjectId, ref: 'Category' }
})
postSchema.set('toJSON', {virtuals: true})
module.exports = mongoose.model('Post', postSchema)
Затем попробуйте это:
Post.find({})
.populate({path: 'category'}, {select: 'name'})
.exec((err, posts) => {
if (err) return res.json({ error: err })
posts.category = posts.category.name
res.render('posts/index', {
postList: posts
})
})
Предложение select должно получить только имя поля из этой коллекции
Для получения дополнительной информации вы можете проверить эту ссылку: https://mongoosejs.com/docs/populate.html
Надеюсь, я вам помог