Dans Mongoose, je peux utiliser un remplissage de requête pour remplir des champs supplémentaires après une requête. Je peux également remplir plusieurs chemins, tels que
Person.find({})
.populate('books movie', 'title pages director')
.exec()
Cependant, cela générerait une recherche sur le livre regroupant les champs pour le titre, les pages et le réalisateur - et également une recherche sur le film rassemblant les champs pour le titre, les pages et le réalisateur également. Ce que je veux, c'est obtenir le titre et les pages des livres uniquement, et le réalisateur du film. Je pourrais faire quelque chose comme ça:
Person.find({})
.populate('books', 'title pages')
.populate('movie', 'director')
.exec()
ce qui me donne le résultat attendu et les requêtes.
Mais existe-t-il un moyen d'avoir le comportement du deuxième extrait de code en utilisant une syntaxe de "ligne unique" similaire au premier extrait de code? La raison en est que je veux déterminer par programme les arguments de la fonction de remplissage et l'introduire. Je ne peux pas le faire pour plusieurs appels de remplissage.
Après avoir regardé le code source de mangouste, je résous ce problème avec:
var populateQuery = [{path:'books', select:'title pages'}, {path:'movie', select:'director'}];
Person.find({})
.populate(populateQuery)
.execPopulate()
vous pouvez également faire quelque chose comme ci-dessous:
{path:'user',select:['key1','key2']}
Voici comment cela se fait sur la base de la documentation Mongoose JS http://mongoosejs.com/docs/populate.html
Disons que vous avez un schéma BookCollection qui contient des utilisateurs et des livres Pour effectuer une requête et obtenir tous les BookCollections avec ses utilisateurs et livres associés, vous devez le faire
models.BookCollection
.find({})
.populate('user')
.populate('books')
.lean()
.exec(function (err, bookcollection) {
if (err) return console.error(err);
try {
mongoose.connection.close();
res.render('viewbookcollection', { content: bookcollection});
} catch (e) {
console.log("errror getting bookcollection"+e);
}