mongoose如何填充模型中引用的数组

时间:2017-04-09 22:02:08

标签: mongoose

我正在制作一个blogapp。两个模型注释和userProfile,注释看起来像这样:

var commentSchema = new Schema({
            userId: {type: Schema.Types.ObjectId, ref: 'userProfile'},
            replyCommentId: [{type: Schema.Types.ObjectId, ref:'Comment'}],
            commentDesc: String,
            date: {type: String, default: Date.now()}
          });

我已将回复保存为评论本身,并通过存储在数组中的replycomment id引用主要评论。

我尝试填充这些回复字段。

commentsModel.findOne({_id: commentId}).populate('replyCommentId')
.populate('replyCommentId.userProfile').exec(function (err, docs) {
    cb(err, docs);
})

我可以使用模型填充replyCommentId,但userProfile内的replycommentId未填充。

2 个答案:

答案 0 :(得分:0)

你可以这样试试:

...

const populateQuery = [];
populateQuery.push({
  path: 'replyCommentId'
}, {
  path: 'replyCommentId',
  populate: {
    path: "userProfile",
    model: "Comment",
  },
});

fields.commentsModel.findById(commentId)
  .populate(populateQuery)
  .exec((error, docs) => {
    cb(error, docs);
  });

....

答案 1 :(得分:0)

你不需要使用两个填充问题填充其中的replyCommentId和userId。可以使用一个填充来完成。

你可以试试这个:

commentsModel
    .findOne({_id: commentId}).
    .populate({ 
        path : 'replyCommentId',
        populate : {
            path :'userId'
        }
    }).exec(function (err, docs) {
        cb(err, docs);
    });

有关Mongoose Populate及其选项的更多信息,请参阅Mongoose Populate Documentation。寻找跨多个级别填充