Anda dapat melakukannya menggunakan .aggregate()
dan sebagian besar $unwind
operator pipa:
Di MongoDB 3.4 modern dan di atasnya Anda dapat menggunakan bersama-sama dengan $replaceRoot
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
Di versi sebelumnya Anda menentukan semua bidang dengan $project
:
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
Jadi $unwind
adalah apa yang Anda gunakan untuk mendekonstruksi atau "mendenormalisasi" entri array untuk diproses. Secara efektif ini membuat salinan seluruh dokumen untuk setiap anggota larik.
Tugas selanjutnya adalah mengembalikan "hanya" bidang yang ada dalam larik.
Padahal itu bukan hal yang sangat bijaksana untuk dilakukan. Jika maksud Anda hanya mengembalikan konten yang disematkan dalam larik dokumen, Anda sebaiknya memasukkan konten tersebut ke dalam koleksi terpisah.
Ini jauh lebih baik untuk kinerja, memisahkan semua dokumen dari koleksi dengan kerangka kerja agregasi, hanya untuk membuat daftar dokumen-dokumen itu dari array saja.