как получить другие детали схемы на основе ссылочного ключа

У меня есть проект, над которым я работаю. У меня есть схема комментариев, схема лайков и схема блога. Все три объявлены как отдельные схемы, но схема лайков и комментариев затем вкладывается в схему блогов как дочерние элементы, то есть комментарии: [CommentSchema]. Теперь у меня есть страница, на которой, когда кто-то нажимает на блог, отображаются все комментарии вместе с блогом. Это код, который получает блог Blog.findById(id).populate('user', 'username').exec(function(err, blog). Теперь в массиве комментариев есть ключ с именем commOwner, который ссылается на objectid из другой схемы, называемой пользователем, точно так же, как схема блога также имеет ссылочный ключ, как вы можете видеть из кода Я пытаюсь отобразить граватар и имя пользователя каждого человека, который оставил комментарий, на основе ссылочного ключа commOwner, который находится в схеме комментариев но я не знаю, как это сделать. Я также хочу иметь возможность заполнять имена пользователей и граватар тех, кто комментировал блог, в том же коде, что и для блога. Пожалуйста, помогите мне с этим , ниже код для всех моих схем

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;


/*Comment schema*/
var CommentSchema = new Schema({
    commOwner: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    commbody: {
        type: String,
        default: '',
        trim: true,
        //required: 'Comment cannot be blank'
    },
    updated: {
        type: Date,
        default: Date.now
    }
});

/**
 * Likes Schema
 */
var LikeSchema = new Schema({
    score : {
        type: Number,
        default: 0
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});


/**
 * Blog Schema
 */
var BlogSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    title: {
        type: String,
        default: '',
        trim: true,
        required: 'Title cannot be blank'
    },
    content: {
        type: String,
        default: '',
        trim: true
        //required: 'Content cannot be blank'
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    comments: [CommentSchema],
    likes: [LikeSchema]

});

mongoose.model('Blog', BlogSchema);

person user3775998    schedule 02.08.2014    source источник


Ответы (1)


Blog.findById(id).
  populate(
     [{path:'user', select:'username'},
     {path:'comments.commOwner',select:'username profilepic ...'}])
  .exec(function(err, blog){...})

В поле select укажите другие поля (через пробелы), которые будут заполнены в commOwner. Ознакомьтесь с документами.

person ma08    schedule 04.08.2014