‫Instruktur: Jadi, ini adalah
‫bagian kedua dari penghitungan statistik tinjauan.
‫Kali ini, ketika ulasan diperbarui atau dihapus.
‫Dan bagian ini sebenarnya sedikit
‫lebih sulit karena, perlu
‫diingat bahwa review diperbarui
‫atau dihapus
‫menggunakan findByIdAndUpdate atau juga findByIdAndDelete, kan?
‫Jadi untuk ini, kami sebenarnya tidak memiliki middleware
‫dokumen, tetapi hanya middleware kueri, oke.
‫Jadi dalam kueri, kami sebenarnya tidak memiliki
‫akses langsung ke dokumen untuk kemudian melakukan sesuatu yang
‫mirip dengan ini, oke.
‫Karena, ingat, kita perlu akses ke tinjauan saat
‫ini, sehingga dari sana, kita dapat mengekstrak
‫ID tur, dan kemudian menghitung statistik dari sana, kan, tetapi sekali
‫lagi, untuk kait ini di
‫sini, kami hanya memiliki middleware kueri, oke.
‫Tapi izinkan saya sekarang menunjukkan
‫trik yang bagus untuk benar-benar mengatasi batasan ini.
‫Jadi, kita akan mengimplementasikan
‫pra-middleware untuk hook ini, untuk event ini pada dasarnya.
‫Jadi sebelum, dan sekali lagi saya akan menggunakan
‫ekspresi reguler untuk string yang dimulai dengan
‫findOneAnd dan hanya itu.
‫Jadi yang
‫ini kemudian akan berfungsi untuk findOneAndUpdate,
‫dan findOneAndDelete karena, ingatlah
‫bahwa di balik layar, findByIdAndUpdate hanyalah
‫singkatan untuk findOneAndUpdate dengan ID saat ini, kan.
‫Jadi di sini, kita sebenarnya perlu
‫menggunakan hook middleware findOneAndDelete dan findOneAndUpdate, oke.
‫Jadi, fungsi, dan itu mendapat kata kunci berikutnya
‫karena itu adalah pra-middleware.
‫Jadi, ingat bahwa tujuannya adalah untuk mendapatkan akses
‫ke dokumen tinjauan saat ini, oke, tapi
‫di sini, kata kunci ini adalah kueri saat ini.
‫Sekarang, bagaimana kita akan menyiasatinya?
‫Yah, pada dasarnya kita dapat menjalankan kueri,
‫dan kemudian itu akan memberi kita
‫dokumen yang sedang diproses.
‫Jadi untuk melakukan itu, kita bisa menggunakan findOne.
‫Dan itu saja.
‫Jadi yang perlu kita lakukan hanyalah menunggu kueri ini dan kemudian
‫menyimpannya di suatu tempat.
‫Jadi sebut saja r, yang akan berdiri untuk ditinjau, oke.
‫Kemudian simpan sebagai async.
‫Dan, itu saja.
‫Dan hanya untuk memastikan bahwa ini
‫berfungsi di sini, mari kita log ini ke konsol, oke.
‫Jadi tanpa melakukan perhitungan apa pun,
‫kami hanya tertarik
‫untuk melihat apakah trik bagus ini berhasil.
‫Jadi pada dasarnya, trik untuk menyiasatinya di
‫midddleware kueri, kami
‫hanya memiliki akses ke kueri.
‫Jadi sekali lagi, kita perlu mendapatkan akses ke
‫dokumen, jadi pada dasarnya kita menjalankan kueri ini dengan
‫menggunakan findOne.
‫Baiklah, jadi mari kita perbarui ulasan, jadi mari kita perbarui
‫yang terakhir yang kita lakukan, baiklah, dan peringkatnya,
‫sekarang mari
‫kita atur menjadi empat.
‫Jadi sebelumnya lima
‫dan sekarang kami mengubahnya menjadi empat.
‫Jadi
‫dikirim itu, dan ini ulasannya.
‫Sekarang tentu saja, peringkatnya masih ditetapkan
‫ke lima saat ini, karena findOne ini di
‫sini benar-benar mendapatkan dokumen dari database, dan
‫pada saat ini, di pra, masih tidak
‫ada perubahan apa pun pada database, dan jadi
‫itu lima sebelumnya,
‫dan sekarang masih akan menjadi lima.
‫Tapi itu tidak terlalu
‫penting di sini karena yang kami minati hanyalah ID ini.
‫Sebenarnya, ID tur ini, kan, karena
‫itulah yang akan
‫kita perlukan untuk menghitung peringkat rata-rata.
‫Oke, dan sekarang, mari kita benar-benar menggunakan fungsi itu.
‫Oke, sekarang, mari kita pikirkan
‫hal ini karena jika kita menggunakan fungsi calcAverageRatings ini
‫pada saat
‫ini, maka kita akan menghitung
‫statistik menggunakan data yang tidak diperbarui, oke.
‫Dan itulah alasan yang sama mengapa sampai
‫di sini, kita juga perlu menggunakan post dan
‫bukan pre, oke, karena hanya setelah dokumen sudah
‫disimpan ke database masuk
‫akal untuk kemudian menghitung peringkatnya.
‫Jadi di sini, ini adalah hal yang sama
‫persis, dengan perbedaan besar bahwa kita tidak bisa begitu
‫saja mengubah pra-posting ini.
‫Jadi kami tidak dapat melakukannya karena saat ini
‫kami tidak lagi memiliki akses ke kueri
‫karena kueri telah dieksekusi, kan, dan tanpa kueri,
‫kami tidak
‫dapat menyimpan dokumen tinjauan, dan
‫kami tidak dapat menjalankan fungsi ini.
‫Jadi, ini benar-benar membingungkan, saya mengerti, tetapi saya benar-benar memutuskan untuk
‫membuat kuliah ini dengan cara ini karena, yah, ini
‫benar-benar satu-satunya solusi untuk
‫masalah ini, dan ini adalah latihan yang sangat
‫bagus bagi Anda untuk memahami Hello Experience ini pada dasarnya.
‫Jadi, solusi untuk ini adalah sekarang gunakan post,
‫jadi, reviewSchema, maka pada dasarnya sama,
‫jadi mari, sebenarnya, mari kita salin semua ini,
‫buat hidup kita sedikit lebih mudah, singkirkan
‫ini, dan singkirkan lanjut.
‫Di sini, kita juga perlu
‫menelepon selanjutnya, oke, tapi kemudian kita lakukan posting, oke.
‫Dan sekarang titik
‫waktu ini, jadi setelah kueri selesai,
‫dan oleh karena itu tinjauan telah diperbarui, ini adalah
‫titik waktu yang tepat di
‫mana kita dapat memanggil fungsi ini.
‫Jadi, hitung peringkat rata-rata.
‫Tapi dari mana kita sekarang mendapatkan ID tur?
‫Nah, kita harus menggunakan trik
‫yang pada dasarnya untuk melewatkan data dari pre-middleware
‫ke post middleware.
‫Jadi alih-alih menyimpan dokumen ini ke variabel sederhana, kita
‫akan menyimpannya ke ini. R.
‫Jadi pada dasarnya, kami membuat properti pada variabel ini.
‫Oke, dan sekarang di sini, kita masih memiliki akses ke sana.
‫Dan sekarang, kita bisa mengatakan ini. r, yang ingat adalah review, dan
‫kemudian . wisata.
‫Jadi, ini sekali lagi cukup membingungkan, tetapi sekali
‫lagi juga cukup menyenangkan setelah Anda memahami
‫cara kerjanya, oke.
‫Sekarang, sekali lagi, kita membutuhkan sesuatu seperti ini di
‫sini untuk benar-benar memanggil fungsi ini di sini
‫karena ingat bahwa ini
‫sebenarnya adalah metode statis, jadi kita perlu memanggilnya pada model.
‫Sekarang di mana model ini dalam kasus ini?
‫Nah, itu di ini. r, yang dalam hal ini,
‫setara dengan this
‫this here di middleware ini,. konstruktor. calcAverageRatings.
‫Woo, itu terlihat sangat luar biasa, bukan?
‫Tentu kita harus menunggu, makanya kita mendeklarasikan ini
‫sebagai async, oke.
‫Jadi, sekali lagi, kami pada dasarnya menggunakan cara ini untuk
‫meneruskan data dari pra-middleware ke middleware pasca, dan
‫kemudian di sini kami
‫mengambil dokumen tinjauan dari variabel ini.
‫Oke, dan sekali lagi, kami memang harus melakukannya dengan cara
‫ini karena pada titik waktu ini di sini, kueri sudah dieksekusi,
‫jadi kami
‫tidak dapat melakukannya di sini.
‫Dan mari kita benar-benar
‫menuliskannya; TIDAK berfungsi di sini, kueri telah dieksekusi.
‫Hebat, dan dengan ini, kita sebenarnya sekarang
‫harus siap untuk menguji ini.
‫Jadi mari kita lanjutkan dan perbarui
‫yang ini di sini sekali lagi, dan atur ke peringkat satu, oke.
‫Yuk sekarang kita lihat di sini, sampai lihat jumlah ratingnya
‫masih lima, tapi rata-rata
‫sekarang hanya tiga, dan sekarang pertanyaannya
‫apakah ini benar-benar diperbarui juga
‫di tur, dan, ya, memang
‫benar .
‫Jadi, lima peringkat dengan rata-rata tiga.
‫Hebat, sekarang mari kita perbarui yang lain.
‫Jadi, untuk itu, mari dapatkan semua ulasan kami,
‫dan sebenarnya kami tidak menginginkan semuanya,
‫tetapi hanya yang terakhir.
‫Dan di sini saya masih
‫memiliki filter ini, jadi saya harus membuangnya,
‫jadi kami mendapatkan
‫semua 65 hasil, jadi semua ulasan ini, tapi kami hanya ingin yang terakhir,
‫jadi yang baru saja kami buat.
‫Jadi mari kita perbarui ...
‫Saya tidak yakin, karena sebenarnya mereka tidak teratur di sini.
‫Ayo, oke, jadi di sini kita punya yang terbaru.
‫Jadi izinkan saya sekarang memperbarui yang ini di sini, katakanlah,
‫empat, hanya sebagai tes akhir, dan itu
‫akan membawa rata-rata sedikit naik.
‫Dan memang benar.
‫Jadi, 3. 6 sekarang, dan tentu saja, jumlahnya
‫masih lima karena Anda tidak menambahkan ulasan baru.
‫Jadi ini berfungsi dengan baik pada pembaruan, mari
‫sekarang juga mengujinya dengan menghapus.
‫Jadi mari kita lanjutkan dan hapus
‫ulasan yang baru saja kita perbarui dan sekarang kita harus
‫turun menjadi hanya empat, dan memang, inilah kita.
‫Jadi sekarang tinggal empat.
‫Dan mari kita benar-benar menghapus semuanya.
‫Jadi, yang ini berikutnya.
‫Ah, di sinilah kita.
‫Kemudian juga yang ini.
‫Jadi, sekarang
‫kita harus turun menjadi tiga saja
‫atau, sebenarnya, kita hanya tinggal dua dengan rata-rata empat.
‫Jadi mari kita lihat mana yang masih tersisa.
‫Jadi yang ini dengan tiga dan yang ini dengan lima.
‫Dan itulah mengapa kami memiliki rata-rata empat ini.
‫Jadi mari kita singkirkan yang ini dan sekarang rata-rata
‫kita seharusnya menjadi lima, bukan?
‫Atau sebenarnya tiga karena yang tersisa
‫hanya tiga.
‫Dan sekarang tes terakhir, menghapus yang terakhir,
‫hanya untuk melihat apa yang akan terjadi setelah kita melakukannya.
‫Dan, kami mendapatkan kesalahan di sini.
‫Jadi, tidak dapat membaca properti nRating dari undefined.
‫Jadi itulah calcAverageRatings pada baris nomor 69.
‫Jadi, tidak tahu apa ini.
‫Jadi, baris 69, dan ini masalahnya di sini.
‫Jadi kami mencoba membaca nRating dari undefined.
‫Jadi statistik nol pada dasarnya tidak terdefinisi.
‫Dan itu karena jika pada dasarnya tidak ada
‫dokumen yang cocok dengan kueri ini di sini, maka
‫kita cukup mendapatkan kembali array kosong.
‫Dan itulah sebenarnya yang kita miliki di sini.
‫Jadi ini adalah array stats dan saat ini tidak
‫ada hasilnya, oke, jadi kita
‫hanya boleh mengeksekusi potongan kode ini di sini setiap
‫kali kita benar-benar memiliki sesuatu di array stats.
‫Jadi mari kita lakukan itu.
‫Jadi jika statistik. panjangnya lebih
‫besar dari nol, lalu lakukan ini.
‫Dan jika tidak, yah, pada dasarnya itu
‫berarti semua ulasan kami hilang, maka pada dasarnya
‫kami ingin kembali ke default.
‫Jadi kita akan mengaturnya
‫ke jumlah nol dan rata-rata 4. 5, yang perlu diingat, adalah default ketika tidak ada
‫ulasan sama sekali.
‫Jadi mari kita cepat membuat review baru,
‫dan bisa jadi ini, oke, jadi
‫kita kembali
‫memiliki satu rating, dan sekarang langsung menghapusnya, hanya untuk
‫menguji potongan kode
‫yang baru saja kita tulis, hanya untuk melihatnya di sini juga,
‫jadi satu peringkat, rata-rata lima.
‫Dan sekarang ketika kami menghapusnya,
‫kami tidak lagi mendapatkan kesalahan.
‫Dan dalam tur kami,
‫kami kembali ke nol dan default 4. 5.
‫Baiklah, baiklah, baiklah, sempurna.
‫Jadi mari kita luangkan waktu sebentar di
‫sini untuk merangkum apa yang baru saja kita lakukan.
‫Jadi untuk dapat menjalankan fungsi
‫ini di sini juga saat memperbarui dan menghapus, kita
‫sebenarnya perlu menggunakan middleware kueri yang diberikan
‫Mongoose kepada kita untuk situasi ini.
‫Oke, jadi, kami tidak memiliki middleware
‫dokumen praktis, yang berfungsi, untuk fungsi-fungsi ini, tetapi sebaliknya kami
‫perlu menggunakan middleware
‫kueri, dan di dalamnya, kami tidak
‫memiliki akses langsung ke dokumen saat ini.
‫Jadi kita perlu
‫mengatasinya dengan menggunakan findOne ini
‫di sini, dan pada dasarnya mengambil dokumen saat ini dari database.
‫Kami kemudian menyimpannya pada variabel kueri
‫saat ini, dan begitulah ini, dan dengan melakukan itu, kami
‫kemudian mendapatkan akses ke sana di middleware pos.
‫Dan kemudian hanya di middleware pos di mana kami
‫benar-benar menghitung statistik untuk ulasan.
‫Dan ingat bahwa kami melakukannya dengan cara ini karena jika
‫kami melakukannya dengan benar
‫di fungsi middleware ini, maka data yang mendasarinya
‫tidak akan diperbarui pada saat itu
‫dan statistik yang dihitung tidak akan benar-benar mutakhir.
‫Dan itulah mengapa kami menggunakan proses dua langkah
‫ini di sini pada dasarnya.
‫Sekarang, mari kita singkirkan konsol ini. log di sini, karena kita sudah selesai sekarang, dan
‫juga statistik ini.
‫Jadi, saya harap ini menyenangkan bagi Anda
‫dan tidak terlalu berlebihan.
‫Saya merancang latihan ini secara khusus sehingga
‫kita dapat memecahkan masalah bisnis dunia nyata
‫dengan menggunakan semua alat yang diberikan Mongoose kepada kita.
‫Jadi, dengan itu, saya harap Anda belajar sedikit lebih
‫baik bagaimana bekerja dengan semua middleware yang
‫berbeda ini dalam situasi yang berbeda kapan pun
‫dibutuhkan dalam situasi dunia nyata.
‫Jadi, pekerjaan yang bagus untuk menyelesaikan kuliah
‫yang cukup menantang ini dan karena masih bersama saya pada titik kursus ini.
‫Sangat bagus untuk saya lihat, jadi saya sangat
‫senang tentang itu.
‫Tapi bagaimanapun, masih ada beberapa konten hebat lainnya
‫yang muncul di bagian ini, jadi mari kita lanjutkan bersama-sama,
‫langsung ke video berikutnya.