Můžete to udělat pomocí .aggregate()
a převážně $unwind
provozovatel potrubí:
V moderní MongoDB 3.4 a vyšší můžete použít v tandemu s $replaceRoot
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
V dřívějších verzích zadáváte všechna pole pomocí $project
:
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
Takže $unwind
je to, co používáte k dekonstrukci nebo "denormalizaci" položek pole pro zpracování. Efektivně to vytvoří kopii celého dokumentu pro každého člena pole.
Zbytek úlohy je o vrácení „pouze“ těch polí přítomných v poli.
Není to však příliš moudré. Pokud je vaším záměrem pouze vrátit obsah vložený do pole dokumentu, pak by bylo lepší umístit tento obsah do samostatné kolekce.
Je to mnohem lepší pro výkon, rozdělit všechny dokumenty z kolekce pomocí agregačního rámce, jen vypsat tyto dokumenty pouze z pole.