Mongoose从另一个子文档填充子文档,其中两个子文档都是主文档的一部分
我在这里遇到了一个挑战,我试图从同一集合中的另一个子文档填充一个子文档。这可能吗?下面是我的示例模式Mongoose从另一个子文档填充子文档,其中两个子文档都是主文档的一部分,mongoose,Mongoose,我在这里遇到了一个挑战,我试图从同一集合中的另一个子文档填充一个子文档。这可能吗?下面是我的示例模式 var chapter = new Schema({ title:String, startPage:Number, endPage:Number }); var keyPoint = new Schema({ text:String, mentionInChapter:[{ type: Schema.ObjectId, ref: 'chapter
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]
});
我在下面进行了尝试,但它没有填充keyPoints数组中的chapterId
Book.findById(id).populate('chapter').exec(函数(err,doc){
如果(!err)
控制台日志(doc);
});
是否有一种方法可以实现这一点,以便我检索的图书文档填充了所有详细信息?您可以尝试使用如下方法:
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);
});
});
谢谢你,阿泰姆。在上述解决方案中,您将章节和关键点作为独立的文档而不是嵌入文档。Keypoint会让我觉得有意义,因为这会增加尺寸。但想知道我是否要一直用这本书来检索章节,我是否需要将其作为一个单独的文档集合?mongoose
populate
非常灵活,所以您可以尝试我的示例,并选择一个对您的案例最有用的。再次感谢Artem的快速回复。如果我运行版本2,我会得到InCapter的空白数组。并且没有抛出错误。因此,它仍然没有人口。路径关键点是一个数组。所以不确定这个path keyPoints.referenceInCapter是否可以工作?应该可以。例如,人们解决同一任务时,尝试添加model
选项,以将两个模型都作为“章节”或模型作为“注释记号”来填充ConfigTested,但结果仍然相同。mongodb中的数据符合本要点-。想知道我是否以错误的方式存储数据?