Vous pouvez le faire en utilisant .aggregate()
et principalement le $unwind
opérateur de pipeline :
Dans MongoDB 3.4 moderne et supérieur, vous pouvez utiliser en tandem avec $replaceRoot
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
Dans les versions antérieures, vous spécifiiez tous les champs avec $project
:
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
Alors $unwind
est ce que vous utilisez pour déconstruire ou "dénormaliser" les entrées du tableau pour le traitement. En fait, cela crée une copie de l'ensemble du document pour chaque membre du tableau.
Le reste de la tâche consiste à renvoyer "uniquement" les champs présents dans le tableau.
Ce n'est pas une chose très sage à faire cependant. Si votre intention est de ne renvoyer que le contenu intégré dans un tableau d'un document, vous feriez mieux de placer ce contenu dans une collection distincte à la place.
C'est bien mieux pour les performances, séparer tous les documents d'une collection avec le cadre d'agrégation, juste pour lister uniquement ces documents du tableau.