‫Narator: Selamat datang kembali.
‫Dalam video ini dan
‫video berikutnya saya ingin memperkenalkan
‫Anda ke pipa agregasi MongoDB yang merupakan kerangka kerja
‫MongoDB yang sangat kuat dan sangat berguna
‫untuk agregasi data.
‫Dan idenya adalah
‫bahwa pada dasarnya kami mendefinisikan saluran
‫yang semua dokumen dari
‫koleksi tertentu melalui mana mereka
‫diproses langkah demi langkah untuk mengubahnya menjadi hasil agregat.
‫Misalnya, kita dapat menggunakan pipa agregasi untuk
‫menghitung rata-rata atau menghitung nilai minimum
‫dan maksimum atau kita dapat menghitung jarak
‫genap, dan kita benar-benar dapat
‫melakukan segala macam hal.
‫Sungguh menakjubkan betapa kuatnya
‫pipa agregasi ini.
‫Baiklah, tapi cukup bicara.
‫Sekarang mari kita mulai menggunakan pipa agregasi dan saya
‫akan membuat fungsi header baru di sini karena
‫nanti kita akan menentukan rute baru dan kemudian
‫menggunakan fungsi itu untuk itu.
‫Tapi rute baru itu, saya akan membuatnya nanti.
‫Jadi saya ingin membuat fungsi
‫di sini yang akan menghitung beberapa statistik tentang tur kami.
‫Jadi saya akan menyebutnya getTourStats.
‫Oke, jadi Statistik untuk statistik, dan
‫itu akan menjadi
‫fungsi asinkron dan kode vs sekarang secara otomatis mengisi ini.
‫Baiklah, mari kita buat atau coba catch block di sini.
‫Sebenarnya, saya akan menyalin ini dari atas sini,
‫dan sekarang di sini saya akan membuat
‫variabel bernama stats.
‫Sekarang pipa agregasi benar-benar merupakan fitur MongoDB.
‫Tapi luwak, tentu saja, memberi kita akses
‫ke sana, sehingga kita bisa menggunakannya di driver luwak, bukan?
‫Jadi menggunakan model wisata kami
‫untuk mengakses koleksi wisata, kami katakan
‫tur. agregat.
‫Jadi pipa agregasi sedikit
‫seperti kueri biasa dan menggunakan pipa
‫agregasi itu seperti melakukan kueri biasa.
‫Perbedaannya di sini adalah bahwa dalam agregasi, seperti
‫yang telah saya sebutkan, kita dapat memanipulasi data
‫dalam beberapa langkah yang berbeda
‫dan sekarang mari kita definisikan langkah-langkah ini.
‫Dan untuk itu, kami melewati serangkaian tahapan yang disebut.
‫Jadi kita melewati sebuah array, dan kemudian di sini
‫kita akan memiliki banyak tahapan.
‫Dan sekali lagi dokumen melewati tahapan ini satu per
‫satu, langkah demi langkah dalam urutan yang ditentukan seperti yang
‫kita definisikan di sini.
‫Jadi masing-masing elemen dalam array ini
‫akan menjadi salah satu tahapan.
‫Dan ada banyak sekali tahapan berbeda yang dapat
‫kita pilih, tetapi saya hanya akan memberi tahu Anda
‫yang paling umum dalam kuliah ini
‫dan juga di kuliah berikutnya.
‫Tapi bagaimanapun, sekarang saya ingin
‫meluangkan waktu sejenak dan melihat sekilas dokumentasi MongoDB
‫karena saya pikir kita belum melakukannya.
‫Jadi MongoDB dan kita sudah tahu website ini.
‫Jadi di situs web MongoDB kami, kami pergi ke
‫sini untuk belajar, kemudian dokumentasi dan kemudian
‫di sini kami memilih Manual MongoDB dan dokumentasi ini sangat besar.
‫Ini benar-benar, ada banyak hal di
‫sini dan jika Anda akan
‫melalui semuanya, maka Anda akan benar-benar menjadi master MongoDB.
‫Jadi ini memberi Anda pengantar yang bagus untuk MongoDB, Anda
‫memiliki instalasi di sini.
‫Anda memiliki Operasi CRUD, jadi gambaran yang bagus
‫tentang banyak hal
‫yang telah kita pelajari sebelumnya, bukan?
‫Kemudian Anda memiliki hal-hal tentang agregasi
‫dan khususnya, pipa agregasi yang akan kita bicarakan
‫sekarang, tetapi apa yang
‫ingin saya tunjukkan kepada Anda di sini
‫sebenarnya adalah referensi yang kita miliki di bagian bawah karena
‫dalam referensi yang kita miliki di sini
‫untuk contoh operator dan di sanalah
‫kami memiliki banyak hal penting yang telah kami gunakan sepanjang waktu.
‫Jadi mari kita lihat di
‫sini di operator kueri, misalnya dan di sini Anda lihat, kami sebenarnya
‫memiliki operator yang sudah kami gunakan.
‫Jadi misalnya, lebih besar dari atau sama, atau kurang
‫dari dan sama, tetapi jika suatu hari
‫nanti di aplikasi Anda sendiri Anda memerlukan beberapa operator
‫lain, nah, sekarang Anda tahu di mana Anda dapat menemukannya.
‫Sekarang tentu saja, itu juga selalu
‫sangat membantu untuk hanya melakukan pencarian Google cepat,
‫mungkin menemukan beberapa posting stack overflow tentang hal itu,
‫tapi percayalah, berkali-kali lebih mudah
‫dan lebih cepat untuk hanya dengan cepat melompat ke dokumentasi dan dengan
‫cepat mencari apa pun yang Anda ' kembali membutuhkan.
‫Anda hanya perlu mengetahui cara kerja
‫dokumentasi dan setelah Anda mengetahuinya, akan sangat mudah
‫bagi Anda untuk menemukan apa yang Anda cari, oke?
‫Di sini Anda juga memiliki
‫beberapa operator logika misalnya, operator OR yang telah kita gunakan.
‫Sekali lagi, benar-benar banyak hal, operator geospasial dan kami akan
‫menggunakan beberapa sebenarnya, nanti, dan
‫ya, benar-benar banyak hal.
‫Lalu apa yang ingin saya tunjukkan setelah kuliah
‫ini sebenarnya, adalah tahapan pipa agregasi.
‫Jadi di sini Anda memiliki banyak dari
‫mereka dan apa yang akan kita gunakan dalam
‫kuliah ini di sini adalah pertandingan, misalnya dan grup,
‫di mana itu?
‫Ya grup, itu adalah salah satu yang sangat penting,
‫dan seperti yang saya sebutkan, saya
‫akan menunjukkan yang paling penting dalam kuliah ini dan yang berikutnya.
‫Tetapi sekali lagi, jika Anda dalam beberapa kasus membutuhkan sesuatu yang
‫lain, silakan saja, datang ke sini untuk dokumentasi ini
‫dan Anda akan menemukan apa yang Anda cari.
‫Baiklah?
‫Bagaimanapun, sekarang mari kita pelajari bagaimana kita dapat mendefinisikan
‫salah satu dari tahapan ini, oke?
‫Dan saya akan mulai dengan pertandingan.
‫Dan pencocokan pada dasarnya adalah
‫untuk memilih atau menyaring dokumen tertentu.
‫Dan itu sangat sederhana.
‫Ini benar-benar seperti objek filter di MongoDB, seperti
‫yang telah kami gunakan berkali-kali.
‫Jadi masing-masing stage adalah
‫objek dan kemudian munculah nama stage.
‫Jadi ini tahap pertandingan, oke?
‫Dan seperti yang saya sebutkan, itu benar-benar hanya sebuah kueri.
‫Jadi katakanlah sebagai permulaan, kami hanya ingin memilih dokumen
‫yang memiliki rata-rata peringkat
‫lebih besar atau sama dengan 4. 5.
‫Jadi bisakah kamu melakukan itu?
‫Aku hanya akan memberimu waktu sebentar untuk melakukannya di sini.
‫Jadi saya harap Anda melakukannya.
‫Jadi peringkat rata-rata, harus lebih besar atau
‫sama dengan 4. 5.
‫Dan begitulah, itulah tahap pertama.
‫Dan biasanya tahap pertandingan ini hanyalah tahap pendahuluan untuk
‫kemudian mempersiapkan tahap-tahap selanjutnya yang akan datang.
‫Jadi yang berikutnya sekarang adalah penyisihan grup.
‫Jadi grup dan
‫kemudian di sana kita harus selalu melewati objek lain.
‫Jadi terlihat agak aneh dengan semua objek ini, tapi,
‫ya, Anda pernah melihatnya sebelumnya dan MongoDB
‫hanya bekerja dengan cara ini.
‫Itu selalu objek, di dalam objek, di dalam objek.
‫Dan grup ini adalah tempat keajaiban yang sebenarnya
‫terjadi karena seperti namanya,
‫ini memungkinkan kita untuk mengelompokkan dokumen
‫bersama-sama, pada dasarnya menggunakan akumulator.
‫Dan akumulator
‫misalnya, bahkan menghitung rata-rata.
‫Jadi jika kami memiliki lima tur, masing-masing
‫memiliki peringkat, kami kemudian dapat menghitung peringkat rata-rata menggunakan grup.
‫Jadi mari kita lakukan hal itu di sini.
‫Sekarang hal pertama, adalah kita selalu
‫perlu menentukan id karena di sinilah kita akan menentukan apa
‫yang ingin kita kelompokkan.
‫Untuk saat ini, kami mengatakan null di sini
‫karena kami ingin memiliki semuanya dalam satu grup sehingga kami
‫dapat menghitung statistik untuk semua tur bersama-sama
‫dan tidak memisahkannya berdasarkan grup.
‫Kami akan, sedikit kemudian juga mengelompokkan berdasarkan hal-hal yang
‫berbeda, misalnya kami dapat mengelompokkan berdasarkan kesulitan
‫dan kami kemudian dapat, misalnya menghitung rata-rata
‫untuk tur mudah, rata-rata untuk tur sedang dan
‫rata-rata untuk tur yang sulit.
‫Jadi sekali lagi, kita dapat mengelompokkan berdasarkan salah satu bidang dan
‫bidang itu, yang akan kita tentukan di sini, tetapi untuk
‫saat ini, seperti yang saya katakan, kami ingin menghitung rata-rata ini
‫untuk semua tur bersama dalam satu grup besar.
‫Jadi dalam hal ini kita katakan _id dan setel ke null.
‫Sekarang mari kita benar-benar menghitung peringkat rata-rata.
‫Untuk melakukan itu, kami hanya menentukan bidang
‫baru, jadi mari kita sebut saja peringkat rata-rata,
‫jadi seperti ini, dan ini
‫akan menjadi baik,
‫rata-rata, yang merupakan operator MongoDB lain, jadi yang ini di sini.
‫Anda akan menemukannya di referensi jika Anda mencarinya.
‫Jadi ini adalah operator matematika
‫yang menghitung rata-rata dan sekarang nama bidangnya.
‫Dan lagi, saya tahu ini akan terlihat sangat
‫aneh, tetapi untuk menentukan bidang yang ingin kita
‫hitung rata-ratanya, kita perlu menggunakan tanda dolar,
‫tetapi dalam tanda kutip di sini dan
‫kemudian nama bidangnya.
‫Jadi peringkat rata-rata dalam hal ini.
‫Dan mari kita juga menghitung harga rata-rata.
‫Jadi harga rata-rata, dan sekali lagi, melakukan kesalahan di sini,
‫dan rata-rata
‫dan sekali lagi, nama bidang
‫dan dalam tanda kutip dan dengan
‫tanda dolar ini.
‫Benar, jadi ini terlihat agak
‫aneh lagi,
‫tetapi inilah cara kerja pipa agregasi.
‫Jadi kami memiliki harga rata-rata.
‫Mari kita juga menghitung
‫harga minimum, jadi harga terkecil, dan harga terbesar.
‫Jadi
‫minPrice dan mulai sekarang, semuanya akan terlihat mirip,
‫jadi sekarang kita menggunakan
‫operator min dan sekali lagi nama field seperti ini.
‫Dan koma di sini dan sekarang mari kita
‫gandakan yang ini untuk menghitung harga maksimum.
‫Dan sekarang, mari kita lihat apa yang
‫sudah kita dapatkan saat ini.
‫Jadi sekarang kita harus benar-benar mengirimkan tanggapan ini,
‫dan sekali lagi, saya
‫akan pergi dan mengambil beberapa tanggapan yang sudah selesai di sini.
‫Jadi data yang ingin kita kirimkan disebut stats.
‫Dan sekarang yang perlu kita lakukan sebenarnya adalah menambahkan rute baru
‫di sini di rute tur kita dan sekali lagi, saya
‫akan mengedit di sini, tepat di atas.
‫Jadi router. route
‫/gettour, atau sebenarnya hanya tour-stats, seperti ini karena
‫get sudah didefinisikan dalam metode HTTP.
‫Jadi tidak perlu mengulanginya di nama.
‫Jadi tourController. getTourStats.
‫Berikan yang aman dan mari kita benar-benar mengujinya sekarang.
‫Jadi saya sangat tertarik untuk mengujinya sekarang, sebenarnya untuk melihat apakah
‫itu berfungsi karena sekali lagi ini adalah alat yang luar biasa dan
‫sangat kuat yang
‫memungkinkan Anda melakukan banyak hal.
‫Jadi statistik tur, kirimkan
‫dan itu bukan hasil yang kami
‫tunggu-tunggu, jadi itu hanya jalur pipa yang kami tentukan,
‫tapi saya sudah tahu mengapa itu terjadi.
‫Jadi kami tidak menunggu hasilnya.
‫Jadi ini, pada dasarnya, seperti
‫kueri normal yang akan mengembalikan objek agregat.
‫Jadi . find akan mengembalikan kueri, dan . agregat
‫akan mengembalikan objek agregat.
‫Dan kemudian hanya ketika
‫kita menunggunya, itu benar-benar kembali dengan hasilnya.
‫Jadi itu juga mengapa kami mendefinisikan fungsi ini di sini
‫sebagai fungsi async, sehingga kami dapat menggunakan menunggu di
‫sana dan ini adalah tempat yang tepat.
‫Mari kita coba lagi.
‫Dan ini dia!
‫Sangat bagus!
‫Kami memiliki peringkat rata-rata dari semua tur kami, kami
‫memiliki harga rata-rata
‫yang Anda lihat adalah 1563 dan kemudian minimum dan maksimum, bukan?
‫Dan dari data kami, kami benar-benar
‫dapat mengonfirmasi bahwa ini benar.
‫Sangat bagus!
‫Benar-benar hebat.
‫Sekarang, satu hal lagi yang
‫ingin saya lakukan di sini adalah menghitung
‫jumlah total peringkat yang kami miliki dan juga jumlah total tur.
‫Jadi kita
‫punya rating rata-rata di
‫sini dan mari kita lakukan sebelumnya, jadi
‫numRatings, seperti ini dan Anda
‫mungkin bisa menebak bahwa yang ini disebut sum dan
‫kemudian ratingAverage, atau sebenarnya bukan ratingAverage, tapi ratingQuantity, kan?
‫Jadi di situlah jumlah peringkat disimpan
‫dan jumlah peringkat, totalnya, akan menjadi
‫jumlah dari semua ini bersama-sama.
‫Dan sekarang, yang terakhir, adalah jumlah tur dan
‫yang itu sedikit lebih rumit,
‫dan itu bagus untuk ditunjukkan kepada Anda di sini.
‫Jadi kita masih ingin menjumlahkan, jadi untuk menjumlahkan semuanya, pada
‫dasarnya, jadi kita masih menggunakan sum, tapi apa
‫yang akan kita tambahkan bersama?
‫Yah, pada dasarnya kita menambahkan satu untuk setiap dokumen,
‫jadi kita katakan 1, dan hanya itu.
‫Jadi pada dasarnya untuk setiap
‫dokumen yang akan melalui jalur ini,
‫satu akan ditambahkan ke penghitung angka ini.
‫Sebut saja numTours.
‫Jadi, ya, mari kita uji sekarang, lagi.
‫Dan memang kami mendapatkan sembilan tur kami dan kami
‫sudah tahu bahwa kami memiliki sembilan.
‫Jadi ini semua statistik untuk semua tur bersama-sama, tapi sekarang mari
‫kita bawa ke tingkat berikutnya.
‫Seperti yang saya katakan sebelumnya, kami sekarang dapat mengelompokkan hasil kami
‫untuk bidang yang berbeda.
‫Dan mari kita mulai dengan kesulitannya.
‫Dan itu sangat mirip dengan menentukan bidang di bawah
‫sana yang hanya merupakan tanda dolar,
‫dan kemudian nama bidang.
‫Jadi $difficulty, berikan brankas dan hanya itu.
‫Kirim ke sini, dan sekarang kami memiliki
‫statistik yang ditentukan untuk masing-masing dari tiga kesulitan ini.
‫Jadi itu benar-benar luar biasa.
‫Jadi ini adalah bagian yang membuat saya tercengang.
‫Ini benar-benar fantastis.
‫Maksud saya, Anda dapat mulai melihat segala
‫macam hal, semua jenis manipulasi
‫data yang dapat Anda lakukan menggunakan saluran pipa ini, bukan?
‫Jadi sekarang kami benar-benar dapat mulai menganalisis
‫berbagai hal, misalnya, kami melihat bahwa tur termudah
‫adalah tur yang mendapatkan peringkat paling
‫buruk dengan 4. 6, sedangkan medium
‫tour adalah yang mendapatkan rating tertinggi.
‫Kita juga bisa melihat bahwa
‫wisata yang sulit adalah yang paling
‫mahal dengan harga rata-rata tahun 1997, sedangkan yang termudah juga
‫yang paling murah dengan harga 1272 kan?
‫Kami juga melihat bahwa tur
‫termudah adalah yang paling banyak kami
‫miliki, jadi empat yang mudah dan hanya dua yang sulit, bukan?
‫Jadi kita bisa menggunakan ini, tentu
‫saja, untuk mendapatkan semua jenis wawasan ke dalam data kita.
‫Ayo komentar
‫yang ini di sini dan coba yang lain,
‫misalnya berdasarkan peringkat, mengapa tidak, mari
‫kita coba, lihat apa yang kita dapatkan.
‫Jadi misalnya, kami memiliki dua tur, jadi pada
‫dasarnya dengan peringkat 4. 5, kami memiliki
‫dua tur dengan 4. 7, satu tur dengan 4. 8, dan
‫tiga tur dengan 4. 9.
‫Oh, dan juga di sini, satu tur dengan 4. 6, jadi misalnya,
‫satu wawasan yang bisa kita dapatkan
‫di sini adalah bahwa tur yang sangat mahal dengan
‫harga rata-rata tahun 1997 ini mendapatkan peringkat yang sangat bagus.
‫Jadi segala macam hal, benar-benar bisa kita lakukan di sini.
‫Mari kita singkirkan yang ini, mari tambahkan yang ini kembali, dan sekarang
‫kita bisa benar-benar
‫genap, melakukan beberapa operasi dengan yang ini.
‫Jadi hanya untuk bersenang-senang, biarkan kesulitan ini menjadi huruf besar.
‫Jadi ini tentu saja, akan menjadi objek lain di sini dan
‫kemudian di depan adalah operatornya.
‫Dan operator dalam hal ini, disebut $toUpper.
‫Jadi, satu lagi operator MongoDB.
‫Jadi periksa, dan sekarang dieja huruf besar.
‫Besar!
‫Jadi kami memiliki babak penyisihan grup di sini yang cukup lengkap.
‫Jadi mari kita coba yang lain yang merupakan tahap pengurutan.
‫Jadi objek lain dalam array kami untuk tahap lain dan
‫yang ini disebut sort.
‫Jadi urutkan dan kemudian di sana, kita membutuhkan objek lain, dan
‫itu menyelesaikan yang ini secara otomatis, saya tidak tahu mengapa,
‫dan di sini kita sekarang dapat menentukan
‫bidang mana yang ingin kita urutkan dan mari kita benar-benar menggunakan harga rata-rata.
‫Dan sekarang di sini dalam penyortiran kita sebenarnya perlu menggunakan
‫nama bidang yang kita tentukan di sini di grup.
‫Kami tidak bisa lagi menggunakan nama-nama lama karena saat ini
‫mereka sudah tidak ada.
‫Mereka tidak ada lagi.
‫Jadi pada titik ini, dalam pipa
‫agregasi, kami benar-benar sudah mendapatkan hasil ini.
‫Jadi ini sekarang dokumen kami pada dasarnya.
‫Jadi jika Anda ingin mengurutkan berdasarkan harga rata-rata, maka
‫ini adalah nama bidang yang harus kita gunakan.
‫Jadi kita dapat mengatakan, harga rata-rata
‫dan kemudian kita dapat mengatakan 1 untuk naik.
‫Jadi mari kita coba itu.
‫Dan ya, memang.
‫Itu yang paling rendah dan itu yang paling tinggi.
‫Besar!
‫Jadi kami melakukan banyak hal.
‫Biarkan saya menunjukkan kepada Anda bahwa kami juga dapat mengulangi tahapan.
‫Jadi mari kita lakukan pertandingan lain di
‫sini dan yang ini benar-benar hanya
‫untuk menunjukkan kepada Anda bahwa kami benar-benar
‫dapat mengulangi tahapan dan saya juga ingin menunjukkan kepada Anda operator lain.
‫Jadi sekarang mari kita pilih berdasarkan id dan ingat id itu
‫sekarang yang sulit, kan?
‫Jadi kami hanya menentukan itu di sini.
‫Jadi kami ingin id dan sekarang operator baru yang
‫belum kami gunakan.
‫Kami ingin itu tidak sama dengan, dan katakanlah mudah.
‫Jadi, seperti ini kita
‫akan memilih semua dokumen yang tidak mudah.
‫Nah, dalam hal
‫ini yang dikatakan sedang dan sulit bukan?
‫Jadi pada dasarnya, tidak termasuk yang mengatakan mudah, bukan?
‫Jadi sekali lagi, ini
‫tidak terlalu berguna di sini karena itu akan menghilangkan banyak data penting kami, tetapi
‫hanya untuk menunjukkan kepada Anda bahwa kami
‫tentu saja dapat mencocokkan beberapa kali.
‫Jadi dalam hal ini, kami mencocokkan satu kali
‫sebelum kami benar-benar melakukan grup dan kemudian kami mencocokkan setelah kami
‫siap, melakukan pengelompokan.
‫Sekarang, mari kita simpan ini di sini,
‫di luar jalur agregasi kita, tapi
‫saya akan meninggalkannya di sini, hanya agar
‫Anda menyimpannya sebagai referensi.
‫Coba lagi, coba lagi, dan inilah
‫hasil kami untuk mendapatkan
‫statistik tur kami.
‫Jadi, sangat bagus, sangat bagus.
‫Saya harap Anda menikmati video
‫ini dan di video berikutnya, kami
‫sebenarnya akan terus menggunakan pipa agregasi untuk melakukan beberapa perhitungan lagi.
‫Dan untuk menunjukkan kepada Anda beberapa tahapan yang lebih berbeda.
‫Jadi pantau terus untuk yang satu itu.