提问者:小点点

Mongoose从另一个子文档填充子文档,其中两个子文档都是主文档的一部分


我在这里遇到了挑战,我试图从同一集合中的另一个子文档中填充一个子文档。这可能吗?下面是我的示例模式

var chapter = new Schema({
  title:String,
  startPage:Number,
  endPage:Number
});


var keyPoint = new Schema({
  text:String,
  mentionInChapter:[{
      type: Schema.ObjectId,
      ref: 'chapter'}]
});


var Book = new Schema({
   title:String,
   author:String,
   chapters:[chapter],
   keyPoints:[keypoint]
});

我在下面尝试过,它没有在keyPoint数组中填充chapterId。

Book. findById(id).人口('章节').exec(函数(错误,文档){if(!err)控制台.log(文档);});

有没有办法实现这一点,以便我检索的Book文档填充了所有详细信息?


共1个答案

匿名用户

您可以尝试使用Model. Popate方法,如下所示:

var chapter = new Schema({
  title:String,
  startPage:Number,
  endPage:Number
});

var keyPoint = new Schema({
  text:String,
  mentionInChapter:[{type: Schema.ObjectId, ref: 'chapter'}]
});

var Book = new Schema({
   title:String,
   author:String,
   chapters:[chapter],
   keyPoints:[keyPoint]
});

Book.findById(id)
   .lean()
   .populate('chapters keyPoints')
   .exec(function (err, docs) {
      if (err) throw err;

      Book.populate(docs, {path: 'keyPoints.mentionInChapter'}, function (err, book) {
         if (err) throw err;

         console.log(book);
      });
   });

更新:版本2:

var chapter = new Schema({
  title:String,
  startPage:Number,
  endPage:Number
});

var keyPoint = new Schema({
  text:String,
  mentionInChapter:[{type: Schema.ObjectId, ref: 'chapter'}]
});

var Book = new Schema({
   title:String,
   author:String,
   chapters:[chapter],
   keyPoints:[keyPoint]
});

Book.findById(id).exec(function (err, doc) {
   if (err) throw err;

   Book.populate(doc, {path: 'keyPoints.mentionInChapter'}, function (err, book) {
      if (err) throw err;

      console.log(book);
   });
});