处理相关文档-填充和模型

时间:2019-06-14 09:21:22

标签: javascript node.js mongodb express mongoose-schema

我对这些技术还很陌生,我不知道自己是否正确。
我正在尝试在表中打印类别的名称,而不是与文档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

1 个答案:

答案 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

希望我能帮助您