在单个查询中填充作为嵌入数组属性的字段

时间:2015-12-28 11:13:12

标签: javascript node.js mongodb mongoose-populate

我正在使用Mongoose& amp;编写一个论坛模块。的NodeJS。

我有一个ForumPost对象的集合,它们有一个属性“comments”,它是一个包含引用属性“author”的mongoose模式,它引用了User模型。我在填写“comments”数组中每个项目的“author”属性时遇到问题。

这是ForumPost对象定义:

var ForumPost = db.model("ForumPost", {

    author: { type: Schema.Types.ObjectId, ref: "User", required: true, default: null, select: true},

    comments: [new db.Schema({
        author: { type: Schema.Types.ObjectId, ref: "User" },
        comment: { type: String, default: ""},

    })]

});

当我从数据库中提取这些内容时,我正在填充论坛帖子的“作者”字段,该字段工作正常,因为它是一个基本的填充操作。

我今天早上一直试图填充评论数组的“作者”字段无济于事,我的最新尝试发布在下面。

我使用以下查询:

ForumPost.findOne({alliance_id: alliance._id, _id: post_id})
                        .populate("author")
                        .populate({ 
                             path: 'comments',
                             populate: {
                               path: 'comments.author',
                               model: 'User'
                             } 
                          })
                        .select("comments")
                        .exec(function(error, post) {

                return res.json(post);
            });

这可以在这个单一查询中填充ForumPost的comments数组中对象的“author”字段吗?

1 个答案:

答案 0 :(得分:0)

由于您没有进行任何嵌套填充,因此您可以在单个populate调用中包含这两个路径:

ForumPost.findOne({alliance_id: alliance._id, _id: post_id})
    .populate('author comments.author')
    .select('author comments')
    .exec(function(error, post) {
        return res.json(post);
    });