2016-01-08 2 views
0

У меня есть база данных MongoDB, содержащая данные о футбольных клубах. В клубе есть игроки и сезоны. У каждого игрока может быть разный номер команды.Как заполнить поддокумент Mongoose данными из другого поддокумента

Рассмотрим следующие Mongoose схемы:

const clubSchema = new mongoose.Schema({ 
    players: [playerSchema], 
    seasons: [seasonSchema] 
}); 

const personSchema = new mongoose.Schema({ 
    firstName: String, 
    lastName: String 
}); 

const playerSchema = new mongoose.Schema({ 
    person: personSchema, 
    picture: String 
}); 

const seasonSchema = new mongoose.Schema({ 
    name: String, 
    seasonPlayers: [seasonPlayerSchema] 
}); 

const seasonPlayerSchema = new mongoose.Schema({ 
    player: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Player" 
    }, 
    squadNumber: Number 
}); 

Как получить полностью заполненный Club документ? Так что вместо того, чтобы получить что-то вроде этого:

{ 
    players: [ 
    { 
     _id: ObjectId("abc123"), 
     person: { 
     firstName: "John", 
     lastName: "Doe" 
     } 
     picture: "john.jpg" 
    } 
    ], 
    seasons: [ 
    name: "2015-2016", 
    seasonPlayers: [ 
     { 
     player: ObjectId("abc123"), 
     squadNumber: 10 
     } 
    ] 
    ] 
} 

Я хочу что-то вроде этого:

{ 
    players: [ 
    { 
     _id: ObjectId("abc123"), 
     person: { 
     firstName: "John", 
     lastName: "Doe" 
     } 
     picture: "john.jpg" 
    } 
    ], 
    seasons: [ 
    name: "2015-2016", 
    seasonPlayers: [ 
     { 
     player: { 
      person: { 
      firstName: "John", 
      lastName: "Doe" 
      } 
      picture: "john.jpg" 
     }, 
     squadNumber: 10 
     } 
    ] 
    ] 
} 

ответ

0

Вы можете использовать точечную нотацию в population пути мангуст, чтобы указать путь в иерархии поддокументе для заполнения:

+0

Я пробовал это, но «игрок» получает значение «null» – Korneel

+0

@Korneel. «PlayerSchema» встроен только в клубные документы, а не в собственную модель/коллекцию? – JohnnyHK

+0

Действительно, только встроенный, а не в свою коллекцию – Korneel

Смежные вопросы