我对这些技术还很陌生,我不知道自己是否正确。
我正在尝试在表中打印类别的名称,而不是与文档Post相关的所有文档类别的ID(ObjectId模式字段)。但是它一直显示ID。请帮忙!
routes / posts.js
Post
.find({})
.populate('Category')
.exec((err, posts) => {
if (err) return res.json({ error: err })
posts.category = posts.category.name
res.render('posts/index', {
postList: posts
})
})
模型
let categorySchema = new Schema({
name: String,
posts: [{ type: Schema.Types.ObjectId, ref: 'Post' }]
})
module.exports = mongoose.model('Category', categorySchema)
let postSchema = new Schema({
title: String,
content: String,
date: String,
category: {type: Schema.Types.ObjectId, ref: 'Category' }
})
module.exports = mongoose.model('Post', postSchema)
视图/帖子/index.pug
tbody
each post in postList
tr
td #{post.title}
td #{post.content}
td #{post.date}
td #{post.category} <--HERE IS WHERE I NEED
post.category.name
答案 0 :(得分:0)
您正在尝试填充字段类别,因为它在架构中与集合类别有关,所以您需要对字段类别(而不是集合)进行填充。
将此添加到您的模型:
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
希望我能帮助您