Après avoir passé une journée à essayer de faire avancer les choses, je pense qu'il est temps de demander de l'aide.Mongoose profond peupler les résultats dans [Objet] au 2e niveau
Je souhaite remplir 2 niveaux d'un document.
J'ai essayé avec populate() mais il semble fonctionner seulement pour le premier niveau, pas pour remplir en profondeur! Je lis beaucoup à SO et je sais que ça devrait marcher mais je pense qu'il me manque quelque chose de vraiment stupide ...
Veuillez me faire savoir où je fais des erreurs.
Voici le code pertinent.
Schemas
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);
documents réels enregistrés dans MongoDB
compositions:
{
"_id" : ObjectId("59e5db4595fe650a71fb0e07"),
"name" : "Test Pop 7",
"contributions" : [
ObjectId("59e5db4595fe650a71fb0e05")
]
}
Contributions:
{
"_id" : ObjectId("59e5db4595fe650a71fb0e05"),
"name" : "Honda",
"media" : ObjectId("59e4ac5dacacd709eac2c856")
}
médias:
{
"_id" : ObjectId("59e4ac5dacacd709eac2c856"),
"name" : "Logo_big.png",
"width" : 662,
"height" : 540
}
Mes essais (? = Code erroné)
dans le nœud JS, quand je fais cela (selon la documentation):
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);
}
});
imprime ceci, sans renseigner le champ média:
{ _id: 59e5db4595fe650a71fb0e07,
name: 'Test Pop 7',
contributions:
[ { _id: 59e5db4595fe650a71fb0e05,
name: 'Honda',
media: [Object] } ]
}