Mongoose深度填充结果在二级
花了1天的时间想完成工作之后,我想是时候请求帮忙了。
我想填充文档的两个级别。
我尝试与填充(),但它似乎只适用于第一级,而不是深填充! 我读了很多,我知道它应该工作,但我想我错过了一些真正愚蠢的东西…
请让我知道我犯了什么错误。
这里是相关的代码。
架构
var compositionSchema = new Schema({ name: { type: String, required: true }, contributions: [{ type: Schema.Types.ObjectId, ref: 'Contribution' }] }); mongoose.model('Composition', compositionSchema); var contributionSchema = new Schema({ name: { type: String, required: true }, media: { type: Schema.Types.ObjectId, ref: 'Media' } }); mongoose.model('Contribution', contributionSchema); var mediaSchema = new Schema({ name: { type: String, required: true } }); mongoose.model('Media', mediaSchema);
在MongoDB中保存的实际文档
组成:
{ "_id" : ObjectId("59e5db4595fe650a71fb0e07"), "name" : "Test Pop 7", "contributions" : [ ObjectId("59e5db4595fe650a71fb0e05") ] }
贡献:
{ "_id" : ObjectId("59e5db4595fe650a71fb0e05"), "name" : "Honda", "media" : ObjectId("59e4ac5dacacd709eac2c856") }
媒体:
{ "_id" : ObjectId("59e4ac5dacacd709eac2c856"), "name" : "Logo_big.png", "width" : 662, "height" : 540 }
我的尝试(=错误的代码?)
在节点JS,当我这样做(按照文档):
Composition.findOne({ name: "Test Pop 7" }) .populate({ path: 'contributions', model: 'Contribution', populate: { path: 'media', model: 'Media', } }) .exec((error, doc) => { if (error) { console.log(error); } else { console.log(doc); } });
打印出来,而不实际填充媒体字段:
{ _id: 59e5db4595fe650a71fb0e07, name: 'Test Pop 7', contributions: [ { _id: 59e5db4595fe650a71fb0e05, name: 'Honda', media: [Object] } ] }
它的工作,牢记在你的问题的关键词: 打印 。 用console.log()
打印,它只是显示一些(第二)层次的数组中包含的文档的type
(用typeof
检查)。 如果你这样做:
console.log(doc.contributions[0].media[0])
你会看到你的填充media
文件。