MongoDB pipa agregasi
tersedia untuk memecahkan masalah Anda. Anda mendapatkan detail dari array yang saya proses dengan $unwind
dan kemudian menggunakan $group
untuk "menjumlahkan" totalnya:
db.collection.aggregate([
// Unwind the array to de-normalize as documents
{ "$unwind": "$details" },
// Group on the key you want and provide other values
{ "$group": {
"_id": "$details.itemcode",
"itemname": { "$first": "$details.itemname" },
"totalprice": { "$sum": "$details.price" },
"totalqty": { "$sum": "$details.qty" }
}}
])
Idealnya Anda menginginkan $match
tahap di sana untuk menyaring data yang tidak relevan terlebih dahulu. Ini pada dasarnya adalah kueri MongoDB dan mengambil semua argumen dan operator yang sama.
Kebanyakan di sini sederhana kok. $unwind
adalah semacam "GABUNG" dalam SQL kecuali bahwa dalam struktur yang disematkan, "gabung" sudah dibuat, jadi Anda hanya "mendenormalisasi" seperti yang akan dilakukan gabungan antara hubungan tabel "satu ke banyak" tetapi hanya di dalam dokumen itu sendiri. Ini pada dasarnya "mengulangi" bagian dokumen "induk" ke larik untuk setiap anggota larik sebagai dokumen baru.
Kemudian $group
bekerja dari sebuah kunci, seperti dalam "GROUP BY", di mana "kunci" adalah _id
nilai. Semua yang ada di sana "berbeda" dan semua nilai lainnya dikumpulkan oleh "operator pengelompokan".
Di sinilah operasi seperti $first
masuk. Seperti yang dijelaskan pada halaman manual, ini mengambil nilai "pertama" dari "batas pengelompokan" yang disebutkan dalam "kunci" sebelumnya. Anda menginginkan ini karena semua nilai bidang ini "kemungkinan" sama, jadi ini adalah pilihan logis untuk memilih kecocokan "pertama".
Akhirnya ada $sum
pengelompokan operator yang melakukan apa yang diharapkan. Semua nilai yang diberikan di bawah "kunci" adalah "ditambahkan" atau "dijumlahkan" bersama-sama untuk memberikan total. Sama seperti SQL SUM()
.
Perhatikan juga bahwa semua $
nama awalan ada bagaimana kerangka kerja agregasi menangani variabel untuk nama "bidang/properti" dalam dokumen saat ini sedang diproses. "Notasi titik"
digunakan untuk mereferensikan "bidang/properti" yang disematkan di dalam nama properti induk.
Sangat berguna untuk mempelajari agregasi di MongoDB. Ini untuk pertanyaan umum apa yang melampaui pernyataan "PILIH" dasar untuk SQL. Tidak hanya untuk "pengelompokan" tetapi juga untuk manipulasi lainnya.
Baca dokumentasi semua operator agregasi dan juga lihat SQL ke Pemetaan Agregasi dalam dokumentasi sebagai panduan umum jika Anda memiliki beberapa keakraban dengan SQL untuk memulai. Ini membantu menjelaskan konsep dan menunjukkan beberapa hal yang dapat dilakukan.