4 votes

Mongoose peuple plusieurs niveaux profonds

Dire, j'ai un schéma Manager:

{
    name: { type: String },
    clients: [{ type: Mongoose.Schema.ObjectId, ref: 'Client'}]
}

Et j'ai un schéma Client:

{
    name  : { type String },
    cars  : [{ type: Mongoose.Schema.ObjectId, ref: 'Car' }],
    houses: [{ type: Mongoose.Schema.ObjectId, ref: 'House' }]
}

Et également Car et House (leur structure n'est pas importante pour la question. Comment puis-je deep peupler plusieurs champs de Client dans un seul appel à .populate()?

Ce que j'ai essayé:

Manager.find()
    .populate({
         path: 'users',
         populate: { path: 'cars' },
         populate: { path: 'houses' }
    });

et cela me surprendrait vraiment si cela fonctionnait (car j'écrase la clé populate précédemment déclarée passée à la méthode .populate()). Mon exemple renvoie évidemment le champ houses peuplé par utilisateur - celui qui arrive en dernier. Honnêtement, aucune idée, rien dans la documentation non plus. Est-ce même pris en charge? Je sais que c'est le cas pour la peuplement 'superficiel', en se basant sur mon exemple:

User.populate('cars')
    .populate('houses')

Et pour le profond?

7voto

wscourge Points 6538

1) Passez un tableau d'objets avec des propriétés à remplir :

Manager.find()
    .populate({
         path    : 'users',
         populate: [
             { path: 'cars' },
             { path: 'houses' }
         ]
    });

Cette solution permet d'utiliser le peuplement en profondeur à son plein potentiel. Considérez :

Manager.find()
    .populate({
         path    : 'users',
         populate: [
             { path: 'cars' },
             { 
                path    : 'houses',
                populate: {
                    path    : 'rooms',
                    populate: 'windows'
                }
             }
         ]
    });

2) Passez une chaîne de collections délimitées par des espaces à peupler :

Manager.find()
    .populate({
         path    : 'users',
         populate: 'cars maisons'
    });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X