Di MongoDB, operasi agregasi memproses catatan/dokumen data dan mengembalikan hasil yang dihitung. Itu mengumpulkan nilai dari berbagai dokumen dan mengelompokkannya bersama-sama dan kemudian melakukan berbagai jenis operasi pada data yang dikelompokkan seperti jumlah, rata-rata, minimum, maksimum, dll untuk mengembalikan hasil yang dihitung. Ini mirip dengan fungsi agregat SQL
MongoDB menyediakan tiga cara untuk melakukan agregasi
- Pipa agregasi
- Fungsi pengurangan peta
- Agregasi tujuan tunggal
Pipa agregasi
Di MongoDB, pipa agregasi terdiri dari tahapan dan setiap tahapan mengubah dokumen. Atau dengan kata lain, pipa agregasi adalah pipa multi-tahap, jadi di setiap negara bagian, dokumen diambil sebagai input dan menghasilkan kumpulan dokumen yang dihasilkan sekarang di tahap berikutnya (id tersedia) dokumen yang dihasilkan diambil sebagai input dan menghasilkan output . Tahapan pipa dasar menyediakan filter yang akan berfungsi seperti kueri dan transformasi dokumen memodifikasi dokumen yang dihasilkan dan pipa lainnya menyediakan alat untuk mengelompokkan dan menyortir dokumen. Anda juga dapat menggunakan pipa agregasi dalam koleksi pecahan
Mari kita bahas pipa agregasi dengan bantuan sebuah contoh
Pada contoh di atas kumpulan tarif kereta api pada tahap pertama. Di sini, tahap $match memfilter dokumen berdasarkan nilai dalam bidang kelas i. e. kelas. "kelas satu" dan meneruskan dokumen ke tahap kedua. Pada Tahap Kedua, tahap $group mengelompokkan dokumen berdasarkan bidang id untuk menghitung jumlah tarif untuk setiap id unik.
Di sini, fungsi agregat() digunakan untuk melakukan agregasi yang dapat memiliki tiga tahapan operator, ekspresi dan akumulator
Tahapan. Setiap tahap dimulai dari operator tahap yaitu
- $ cocok. Digunakan untuk memfilter dokumen dapat mengurangi jumlah dokumen yang diberikan sebagai input ke tahap selanjutnya
- $proyek. Ini digunakan untuk memilih beberapa bidang tertentu dari koleksi
- $grup. Ini digunakan untuk mengelompokkan dokumen berdasarkan beberapa nilai
- $sort. Ini digunakan untuk mengurutkan dokumen yang mengatur ulang mereka
- $lewati. Ini digunakan untuk melewati n sejumlah dokumen dan meneruskan dokumen yang tersisa
- $batas. Ini digunakan untuk melewati n jumlah dokumen pertama sehingga membatasinya
- $bersantai. Ini digunakan untuk melepas dokumen yang menggunakan array i. e. itu mendekonstruksi bidang array dalam dokumen untuk mengembalikan dokumen untuk setiap elemen
- $ keluar. Ini digunakan untuk menulis dokumen yang dihasilkan ke koleksi baru
Ekspresi. Itu mengacu pada nama bidang dalam dokumen input untuk e. g. { $grup. { _Indo. “$id“, total. {$jumlah. ”$fare“}}} di sini $id dan $fare adalah ekspresi
Akumulator. Ini pada dasarnya digunakan di babak penyisihan grup
- jumlah. Ini menjumlahkan nilai numerik untuk dokumen di setiap grup
- menghitung. Ini menghitung jumlah total dokumen
- rata-rata. Ini menghitung rata-rata semua nilai yang diberikan dari semua dokumen
- min. Itu mendapat nilai minimum dari semua dokumen
- maks. Itu mendapat nilai maksimum dari semua dokumen
- pertama. Itu mendapat dokumen pertama dari pengelompokan
- terakhir. Itu mendapat dokumen terakhir dari pengelompokan
Catatan
- di $group _id adalah bidang Wajib
- $out harus menjadi tahap terakhir dalam alur
- $ jumlah. 1 akan menghitung jumlah dokumen dan $sum. ”$fare” akan memberikan jumlah total tarif yang dihasilkan per id
Contoh
Dalam contoh berikut, kami bekerja dengan
Basis data. GeeksForGeeks
Koleksi. siswa
Dokumen. Tujuh dokumen yang memuat rincian siswa berupa field-value pair
- Menampilkan jumlah siswa dalam satu bagian saja
Dalam contoh ini, untuk menghitung jumlah siswa di bagian B, pertama-tama kita memfilter dokumen menggunakan operator $match, lalu menggunakan akumulator $count untuk menghitung jumlah total dokumen yang diteruskan setelah memfilter dari $
- Menampilkan jumlah siswa di kedua bagian dan usia maksimum dari kedua bagian
Dalam contoh ini, kami menggunakan $group untuk mengelompokkan, sehingga kami dapat menghitung untuk setiap bagian lain dalam dokumen, di sini $sum meringkas dokumen di setiap grup dan akumulator $max diterapkan pada ekspresi usia yang akan menemukan usia maksimum dalam .
- Menampilkan detail siswa yang usianya lebih dari 30 tahun menggunakan tahap pencocokan
Dalam contoh ini, kami menampilkan siswa yang usianya lebih dari 30 tahun. Jadi kami menggunakan operator $match untuk memfilter dokumen
- Menyortir siswa berdasarkan usia
Dalam contoh ini, kami menggunakan operator $sort untuk mengurutkan dalam urutan menaik yang kami berikan 'usia'. 1 jika kita ingin mengurutkan dalam urutan menurun kita cukup mengubah 1 menjadi -1 i. e. 'usia'. -1
- Menampilkan detail siswa yang memiliki usia terbesar di bagian – B
Pada contoh ini, pertama-tama kita hanya memilih dokumen-dokumen yang memiliki bagian B saja, untuk itu kita menggunakan operator $match kemudian mengurutkan dokumen secara descending menggunakan $sort dengan mengatur ‘age’. -1 dan kemudian hanya menampilkan hasil teratas kami menggunakan $limit
- Melepaskan siswa berdasarkan mata pelajaran
Unwinding bekerja pada array di sini dalam koleksi kami, kami memiliki berbagai mata pelajaran (yang terdiri dari berbagai mata pelajaran di dalamnya seperti matematika, fisika, bahasa Inggris, dll) sehingga pelepasan akan dilakukan pada i. e. array akan didekonstruksi dan hasilnya hanya akan memiliki satu subjek, bukan array subjek yang ada sebelumnya
db.students.aggregate([{$unwind:"$subject"}])Pengurangan Peta
Pengurangan peta digunakan untuk menggabungkan hasil untuk volume data yang besar. Pengurangan peta memiliki dua fungsi utama, satu adalah peta yang mengelompokkan semua dokumen dan yang kedua adalah pengurangan yang melakukan operasi pada data yang dikelompokkan
Sintaksis
db.collectionName.mapReduce(mappingFunction, reduceFunction, {out:'Result'});_Contoh
Dalam contoh berikut, kami bekerja dengan
Basis data. GeeksForGeeks
Koleksi. siswaMark
Dokumen. Tujuh dokumen yang memuat rincian siswa berupa field-value pair
Sekarang, kita akan mengelompokkan dokumen berdasarkan usia dan menemukan nilai total di setiap kelompok umur. Jadi, kita akan membuat dua variabel pertama fungsi peta yang akan memancarkan usia sebagai kunci (dinyatakan sebagai "_id" dalam output) dan menandai sebagai nilai data yang dipancarkan ini diteruskan ke fungsi pengurangan kita, yang mengambil kunci dan nilai sebagai data yang dikelompokkan, lalu . Setelah melakukan reduksi hasilnya disimpan dalam sebuah koleksi disini dalam hal ini koleksinya adalah Hasil
Agregasi Tujuan Tunggal
Ini digunakan saat kita membutuhkan akses sederhana ke dokumen seperti menghitung jumlah dokumen atau untuk menemukan semua nilai berbeda dalam dokumen. Ini hanya menyediakan akses ke proses agregasi umum menggunakan metode count(), different(), dan estimasiDocumentCount(), sehingga tidak memiliki fleksibilitas dan kemampuan pipeline
Contoh
Dalam contoh berikut, kami bekerja dengan
Basis data. GeeksForGeeks
Koleksi. siswaMark
Dokumen. Tujuh dokumen yang memuat rincian siswa berupa field-value pair
- Menampilkan nama dan usia yang berbeda (tidak berulang)
Di sini, kami menggunakan metode yang berbeda () yang menemukan nilai berbeda dari bidang yang ditentukan (i. e. , nama)
- Menghitung jumlah total dokumen
Di sini, kami menggunakan count() untuk menemukan jumlah total dokumen, tidak seperti metode find() yang tidak menemukan semua dokumen melainkan menghitungnya dan mengembalikan nomor