Możesz to zrobić za pomocą .aggregate()
i głównie $unwind
operator rurociągu:
We współczesnym MongoDB 3.4 i nowszych możesz używać w tandemie z $replaceRoot
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
We wcześniejszych wersjach wszystkie pola były określane za pomocą $project
:
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
Więc $unwind
jest tym, czego używasz do dekonstruowania lub „denormalizacji” wpisów tablicy do przetwarzania. W efekcie tworzy to kopię całego dokumentu dla każdego członka tablicy.
Reszta zadania polega na zwracaniu "tylko" tych pól, które są obecne w tablicy.
Nie jest to jednak zbyt mądre posunięcie. Jeśli Twoim zamiarem jest zwrócenie zawartości osadzonej w tablicy dokumentu, lepiej byłoby umieścić tę zawartość w osobnej kolekcji.
Jest o wiele lepszy pod względem wydajności, oddzielając wszystkie dokumenty z kolekcji za pomocą struktury agregacji, aby wyświetlić tylko te dokumenty z tablicy.