Dengan Agregasi, seluruh kueri dijalankan sebagai satu proses di server MongoDB - program aplikasi akan mendapatkan kursor hasil dari server.
Dengan program Java juga Anda mendapatkan kursor dari database server sebagai input untuk pemrosesan dalam aplikasi. Kursor respons dari server akan menjadi kumpulan data yang lebih besar dan akan menggunakan lebih banyak bandwidth jaringan. Dan kemudian ada pemrosesan dalam program aplikasi, dan ini menambahkan lebih banyak langkah untuk menyelesaikan kueri.
Saya pikir opsi agregasi adalah pilihan yang lebih baik - karena semua pemrosesan (pencocokan awal dan penyaringan array) terjadi pada server database sebagai satu proses.
Juga, perhatikan langkah-langkah kueri agregasi yang telah Anda posting dapat dilakukan dengan cara yang efisien. Alih-alih beberapa tahap (2, 3, 4 dan 5) Anda dapat melakukan operasi tersebut dalam dua tahap - gunakan $project
dengan $map
pada larik luar dan kemudian $filter
pada larik dalam lalu $filter
larik luar.
Agregasi:
db.test.aggregate( [
{
$addFields: {
Field2: {
$map: {
input: "$Field2",
as: "fld2",
in: {
Field3: "$$fld2.Field3",
Field4: {
$filter: {
input: "$$fld2.Field4",
as: "fld4",
cond: { $eq: [ "$$fld4.id", "123" ] }
}
}
}
}
}
}
},
{
$addFields: {
Field2: {
$filter: {
input: "$Field2",
as: "f2",
cond: { $gt: [ { $size: "$$f2.Field4" }, 0 ] }
}
}
}
},
] )