U kunt dit doen met .aggregate()
en voornamelijk de $unwind
pijpleidingbeheerder:
In moderne MongoDB 3.4 en hoger kun je gebruiken in combinatie met $replaceRoot
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
In eerdere versies specificeert u alle velden met $project
:
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
Dus $unwind
is wat u gebruikt om de array-ingangen voor verwerking te deconstrueren of "denormaliseren". Dit creëert in feite een kopie van het hele document voor elk lid van de array.
De rest van de taak gaat over het retourneren van "alleen" die velden die aanwezig zijn in de array.
Het is echter niet erg verstandig om te doen. Als het uw bedoeling is om alleen inhoud te retourneren die is ingesloten in een array van een document, dan kunt u die inhoud beter in een aparte verzameling plaatsen.
Het is veel beter voor de prestaties, door alle documenten uit een verzameling met het aggregatieraamwerk uit elkaar te halen, alleen om die documenten alleen uit de array op te sommen.