我在檔案“test.js”中有以下代碼,我試圖在其中填充story.fans[0].stories[0]
,但它不起作用。其余代碼運行良好,但當它試圖填充 fan[0] 的子物件故事時,它似乎不起作用。貓鼬可以填充 2 級子物件嗎?
const mongoose = require('mongoose');
main().catch(err => console.log(err));
async function main() {
await mongoose.connect('mongodb://localhost:27017/testMongoose');
const Schema = mongoose.Schema;
const personSchema = Schema({
_id: Schema.Types.ObjectId,
name: String,
age: Number,
stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});
const storySchema = Schema({
author: { type: Schema.Types.ObjectId, ref: 'Person' },
title: String,
fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});
const Story = mongoose.model('Story', storySchema);
const Person = mongoose.model('Person', personSchema);
Story.
findOne({ title: 'Casino Royale' }).populate('fans').
exec(function (err, story) {
if (err) return handleError(err);
console.log('the story is',story.title);
console.log('The fans[0] is %s', story.fans[0].name);
story.fans[0].populate('stories');
console.log('the story written by fan is',story.fans[0].stories[0].title);
//option2
story.fans[0].populate('stories').exec(function(err,fan){
console.log('the story written by fan is',fan.stories[0].title);
});
});
}
這是錯誤訊息:

---------------- 這是我的故事集:
/* 1 */
{
"_id" : ObjectId("61cfd221256ef6d903523700"),
"author" : ObjectId("61cfd221256ef6d9035236fe"),
"title" : "Casino Royale",
"fans" : [
ObjectId("61cfee8b5059fb3fe37b3c5f")
],
"__v" : 1
}
/* 2 */
{
"_id" : ObjectId("61d09887abeb41f82a7e1678"),
"author" : ObjectId("61cfee8b5059fb3fe37b3c5f"),
"title" : "Story 001",
"fans" : [],
"__v" : 0
}
這是我的人合集
/* 1 */
{
"_id" : ObjectId("61cfd221256ef6d9035236fe"),
"name" : "Ian Fleming",
"age" : 50,
"stories" : [],
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("61cfee8b5059fb3fe37b3c5f"),
"name" : "Fan 001",
"age" : 38,
"stories" : [
ObjectId("61d09fbfbd8f3fa20beaa616")
],
"__v" : 14
}
uj5u.com熱心網友回復:
考慮到您提供的資料,第 2 層中沒有要填充的內容,因為參考的 idFan 001與任何故事都不匹配。
Fans stories:
61d09fbfbd8f3fa20beaa616
==> is not found in
Available stories:
61d09887abeb41f82a7e1678
61cfd221256ef6d903523700
但是,如果您修復了您想要使用的參考,則稱為 deep Population
您基本上是在剛剛填充的物件中填充一個欄位。
您的代碼如下所示:
Story.findOne({ title: 'Casino Royale' })
.populate({ path: 'fans', model: 'Person', populate: { path: 'stories', model: 'Story' } }).
exec(function(err, story) {
if (err) return handleError(err);
console.log(story)
console.log('the story is', story.title);
console.log('The fans[0] is %s', story.fans[0].name);
console.log('the story written by fan is', story.fans[0].stories[0].title);
});
我重建了示例但修復了參考,現在輸出看起來像預期的那樣:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/401465.html
