‫Instruktur: Ingat bagaimana kita
‫memiliki bidang untuk peringkat rata-rata pada setiap dokumen tur?
‫Nah sampai saat ini bidang itu tidak benar-benar
‫menyimpan data yang berarti, bukan?
‫Tapi sekarang mari kita ubah
‫itu dan hitung nilai rata-rata dalam kuliah ini.
‫Jadi menyimpan ringkasan kumpulan data terkait pada
‫kumpulan data utama sebenarnya adalah teknik yang sangat populer
‫dalam pemodelan data yang sebenarnya belum saya sebutkan.
‫Dan teknik ini sebenarnya bisa sangat membantu
‫untuk mencegah kueri
‫konstan dari kumpulan data terkait.
‫Jadi dalam aplikasi kami, contoh bagus dari teknik
‫ini adalah menyimpan peringkat rata-rata dan jumlah peringkat
‫pada setiap tur, sehingga kami tidak perlu menanyakan ulasan
‫dan menghitung rata-rata itu setiap kali kami
‫meminta semua tur, baik.
‫Misalnya, itu bisa menjadi
‫sangat berguna untuk halaman ikhtisar tur di
‫front-end kami di mana kami benar-benar tidak ingin
‫menampilkan semua ulasan, tetapi masih ingin menampilkan
‫ringkasan ulasan ini, seperti misalnya, jumlah peringkat dan rata-rata.
‫Dan sebenarnya kami sudah memiliki field untuk itu
‫dalam skema tur kami.
‫Jadi di sini di awal, saya pikir.
‫Ya, jadi kami memiliki
‫rata-rata peringkat dan kuantitas peringkat di
‫sini, tetapi saat ini mereka hanya beberapa
‫angka dan tentu saja, itu bukan rata-rata dan
‫jumlah peringkat yang sebenarnya, karena kami
‫tidak pernah benar-benar menghitungnya pada titik mana pun. aplikasi
‫kita, tapi itulah yang akan kita ubah dalam video ini.
‫Jadi sekarang kita akan menghitung rating rata-rata
‫dan juga jumlah rating dari
‫sebuah tur setiap kali sebuah ulasan baru ditambahkan
‫ke tur itu atau juga ketika sebuah ulasan diperbarui
‫atau dihapus, karena itulah
‫situasi ketika jumlah atau rata-rata mungkin berubah, benar.
‫Jadi bagaimana kita benar-benar akan menerapkan ini?
‫Nah kembali di sini dalam model review
‫kita akan membuat
‫fungsi baru yang akan mengambil
‫ID tur dan menghitung peringkat rata-rata dan jumlah
‫peringkat yang ada di koleksi kami untuk tur yang tepat.
‫Kemudian pada akhirnya fungsi bahkan akan
‫memperbarui dokumen tur yang sesuai.
‫Kemudian untuk menggunakan fungsi itu kita
‫akan menggunakan middleware untuk memanggil fungsi ini pada
‫dasarnya setiap kali ada ulasan baru atau
‫diperbarui atau dihapus, oke.
‫Jadi sekarang mari kita mulai dengan menulis fungsi
‫itu dan untuk itu kita sebenarnya akan menulis metode
‫statis pada skema kita, dan itu adalah fitur
‫Mongoose yang belum kita gunakan.
‫Jadi kami hanya menggunakan metode instan,
‫yang dapat kami panggil pada
‫dokumen dan juga
‫sangat berguna, tetapi kali ini kami benar-benar akan menggunakan metode statis.
‫Oke.
‫Jadi sekali lagi, ini bisa disebut model secara langsung,
‫misalnya seperti ulasan ini. calcStats, oke.
‫Dan cara kerjanya tentu saja reviewSchema
‫dan kemudian . statika dan kemudian nama fungsinya.
‫Jadi calcAverageRatings
‫sama dengan sebuah fungsi, yang mengingat mengambil ID tur,
‫dan ID itu tentu saja untuk
‫tur tempat ulasan saat ini berada.
‫Dan saya tahu bahwa pada titik ini mungkin
‫kedengarannya agak membingungkan, tetapi jangan khawatir
‫setelah kita menerapkan semua
‫ini dan juga
‫saat kita mengujinya, praktiknya akan sangat masuk akal, oke?
‫Pokoknya untuk sekarang benar-benar melakukan perhitungan
‫kita akan kembali menggunakan pipa agregasi, kan.
‫Jadi mari kita ingat bahwa di pengontrol alat kita, jadi di
‫sini kita menggunakan pipa agregasi
‫untuk juga membuat beberapa statistik seperti ini, oke.
‫Jadi kami menggunakan metode agregat, yang kami panggil
‫langsung pada model, oke.
‫Jadi sekarang dalam metode contoh kami, kami sebenarnya dapat melakukan
‫hal yang sama persis.
‫Jadi dalam metode statis seperti ini, kata kunci ini
‫sebenarnya menunjuk ke model saat ini.
‫Jadi itu sebabnya kita bisa menggunakan ini. agregat, karena ingat
‫kita perlu memanggil ini. agregat pada
‫model secara langsung, dan itulah
‫mengapa kami menggunakan metode statis di sini.
‫Karena sekali lagi ini sekarang menunjuk
‫ke model dan kita perlu memanggil agregat selalu pada model, oke.
‫Jadi ke agregat kita harus melewati
‫array semua tahapan yang kita inginkan secara agregat, oke.
‫Jadi apa yang ingin kita lakukan pertama kali?
‫Langkah pertama yang harus dilakukan adalah memilih semua
‫ulasan yang benar-benar milik
‫tur saat ini yang disahkan sebagai argumen.
‫Oke.
‫Jadi tahap pertama kami adalah tahap pertandingan, ingat itu, dan
‫di
‫sini kami melewati objek filter kami
‫dan kami dapat mengatakan tur sama dengan tur,
‫tetapi kami tidak benar-benar membutuhkannya, seperti
‫yang sudah Anda ketahui, jadi mari kita hapus ini bagian, atau sebenarnya
‫hanya untuk membuatnya sedikit kurang membingungkan di sini
‫dengan nama sebut saja yang ini di sini ID tur, oke.
‫Jadi tourId di sini,
‫oke.
‫Jadi seperti ini kami
‫hanya memilih tur yang benar-benar ingin kami perbarui, oke.
‫Sekarang di tahap selanjutnya mari
‫kita hitung statistiknya sendiri,
‫dan untuk itu kita menggunakan babak grup.
‫Dan di fase grup ingat
‫bidang pertama yang perlu kita tentukan adalah ID, jadi _id dan kemudian bidang
‫umum yang semua dokumen
‫memiliki kesamaan yang ingin
‫kita kelompokkan dan jadi itu lagi akan
‫menjadi tur.
‫Jadi seperti pada contoh perhitungan statistik kami sebelumnya di
‫sini kami mengelompokkan berdasarkan tingkat kesulitannya.
‫Jadi seperti ini kami menghitung statistik untuk mudah
‫dan statistik untuk menengah
‫dan kemudian statistik untuk tur yang sulit.
‫Jadi dalam contoh ini, kami mengelompokkan semua
‫tur berdasarkan tingkat kesulitannya,
‫oke.
‫Tapi di sini, tentu saja kami mengelompokkan semua tur menjadi
‫satu dengan tur.
‫Besar.
‫Sekarang jumlah rating, ingat
‫bagaimana kita melakukannya,
‫jadi yang kita lakukan pada dasarnya adalah
‫menambahkan satu untuk setiap tur yang
‫kita miliki, jadi setiap tur yang dicocokkan pada langkah sebelumnya, oke.
‫Jadi jika ada lima dokumen tinjauan untuk tur
‫saat ini maka untuk masing-masing dokumen ini akan ditambahkan satu.
‫Jadi pada akhirnya jumlah peringkat akan menjadi
‫lima, dan lagi, karena tentu saja kami memiliki lima dokumen tinjauan.
‫Jadi masuk akal, kan?
‫Kemudian juga rata-rata rating, yang sama seperti sebelumnya kita menggunakan
‫operator rata-rata dan ini harus berada di dalam sebuah
‫objek
‫dan di sini
‫nama field yang merupakan rating, kan.
‫Jadi ingat bagaimana setiap ulasan memiliki bidang peringkat.
‫Jadi dari situlah kita ingin menghitung rata-ratanya.
‫Oke, dan itu sebenarnya.
‫Jadi jumlah dan rata-rata peringkat
‫persis seperti yang ingin kami hitung dalam agregasi ini.
‫Sekarang perlu diingat bahwa ini sebenarnya mengembalikan janji
‫dan jadi kita perlu menunggu itu dan kemudian menyimpannya
‫ke dalam variabel yang disebut stats.
‫Oke.
‫Kemudian tandai yang ini di sini sebagai
‫async juga,
‫simpan dan sekarang kita benar-benar perlu menggunakan variabel stats itu.
‫Untuk saat ini yang benar-benar ingin saya lakukan hanya
‫untuk menguji ini adalah dengan benar-benar mencatat statistik ke konsol.
‫Menghibur.
‫statistik log.
‫Oke, kemudian di langkah selanjutnya kita akan benar-benar ingin, seperti
‫yang saya sebutkan sebelumnya lalu perbarui dokumen tur dengan
‫statistik ini, tapi saya akan
‫meninggalkannya sebentar lagi, karena untuk saat
‫ini kita sebenarnya perlu memanggil metode
‫ini di suatu tempat , karena jika
‫tidak, statistik di sini tidak akan pernah dipanggil.
‫Dan ingat bagaimana kami mengatakan
‫di awal bahwa kami akan melakukan ini
‫menggunakan middleware setiap kali ulasan baru dibuat.
‫Jadi mari kita terapkan itu menggunakan reviewSchema pra simpan
‫dan
‫kemudian hanya fungsi middleware biasa kita di sini.
‫Dan ingat bahwa dalam
‫jenis middleware ini kata kunci ini
‫menunjuk ke dokumen yang sedang disimpan.
‫Jadi ini menunjuk ke ulasan
‫saat ini, oke.
‫Jadi kita ingin memanggil fungsi calcAverageRating
‫menggunakan ini. tur, benar.
‫Sekarang bagaimana kita sebenarnya akan memanggil fungsi ini?
‫Ingat bagaimana saya
‫mengatakan bahwa fungsi ini tersedia pada model.
‫Jadi pada dasarnya seperti ini
‫menempatkan review. calcAverageRatings dan seperti yang
‫saya katakan, kami ingin menggunakan ini. tur, oke.
‫Dan lagi, karena ini adalah ulasan
‫saat ini dan ini adalah ID tur yang akan
‫kami berikan di dalam calcAverageRatings.
‫Sekarang masalahnya adalah bahwa pada titik ini di
‫sini dalam kode variabel review belum didefinisikan.
‫Sekarang Anda mungkin berpikir bahwa solusi sederhananya adalah
‫dengan memindahkan kode ini ke sini setelah deklarasi tinjauan ini, tetapi
‫sayangnya itu tidak akan berhasil, karena
‫seperti di Express kode ini pada dasarnya berjalan
‫dalam urutan yang dideklarasikan.
‫Jadi jika kita meletakkan kode ini
‫di sini setelah deklarasi review maka reviewSchema ini
‫di sini tidak akan berisi
‫middleware ini, karena kita hanya
‫akan mendeklarasikannya setelah model review sudah dibuat, oke, tapi
‫untungnya masih ada jalan keluarnya. dan itu untuk
‫menggunakan ini. konstruktor.
‫Jadi ini di sini masih menunjuk ke model.
‫Anda tahu, pada dasarnya sekali lagi ini adalah dokumen
‫saat ini dan konstruktor pada dasarnya adalah
‫model yang membuat dokumen itu.
‫Jadi ini di sini adalah
‫singkatan dari tur dan jadi kita bisa melakukannya seperti ini.
‫Kemudian panggil berikutnya seperti biasa dan hanya itu.
‫Jadi sekarang mari kita pergi ke depan dan menguji ini.
‫Dan untuk melakukan itu saya akan membuat tur baru terlebih
‫dahulu, karena tur lain yang sudah kami
‫miliki memiliki rata-rata dan jumlah
‫peringkat yang sudah dihitung dan jadi
‫kami benar-benar ingin memulai dari awal di sini saat menguji ini.
‫Jadi untuk membuat tur baru kita perlu login sebagai
‫administrator, dan saya pikir kita saat ini, tapi hanya untuk memastikan
‫mari kita lakukan itu lagi.
‫Oke.
‫Jadi ini adalah tur uji baru.
‫Baiklah mari kita hapus ini di sini, mereka tidak wajib, dan
‫saya pikir dengan ini kita baik-baik saja.
‫Baiklah, dan di sini Anda melihat default yang kami
‫atur sebelumnya sehingga peringkat rata-rata
‫untuk lima dan kuantitas disetel ke nol, oke.
‫Sekarang untuk membuat ulasan baru, kita sebenarnya
‫harus masuk sebagai pengguna biasa, jadi
‫bukan administrator.
‫Jadi mari kita dapatkan pengguna normal, katakanlah.
‫Jadi mari kita gunakan Laura ini di sini.
‫Jadi Laura@contoh. com
‫dan seperti yang saya sebutkan sebelumnya, kata sandinya selalu sama.
‫Jadi mari kita lakukan itu dan sekarang kita akan membuat ulasan baru tentang tur.
‫Jadi sekarang mari kita dapatkan tur yang kita
‫buat tadi, jadi ID ini dan taruh di sini di URL.
‫Oke, jadi ingat bahwa rute ini
‫sekarang secara otomatis mendapatkan ID tur dari URL
‫dan ID pengguna dari pengguna yang saat ini masuk,
‫oke.
‫Jadi mari kita gunakan yang ini sebagai
‫peringkat pertama, mari kita kirimkan, dan sekarang saya ingin melihat konsol kita.
‫Kami memiliki output di sini, tetapi untuk beberapa alasan itu
‫hanya seperti array kosong ini.
‫Jadi pasti ada sesuatu yang tidak berfungsi di sini.
‫Jadi mari kita lihat ID tur di sini hanya untuk memastikan
‫bahwa kita mendapatkan nilai yang benar di sini, ID dan mari juga
‫mengomentari bagian ini di
‫sini hanya untuk melihat apakah mungkin ada kesalahan di bagian
‫ini, jadi sekarang mari kita coba itu lagi.
‫Saya hanya akan menambahkan yang sama di sini lagi, oke.
‫Oke, jadi sekarang kita benar-benar mendapatkan sesuatu.
‫Jadi kami memiliki satu ulasan ini yang merupakan
‫ulasan yang kami buat pada awalnya.
‫Jadi itu dimulai dengan ac15
‫ini, tapi yang baru saja saya buat adalah 66d ini, oke.
‫Jadi mari kita lihat itu di sini di Kompas.
‫Jadi kita harus pergi ke halaman terakhir.
‫Oke, jadi yang muncul di konsol kita hanya yang
‫ini di sini, tapi bukan yang kedua
‫yang baru saja kita buat, oke.
‫Jadi jika sekarang kita membuat yang
‫ketiga maka kita mungkin harus melihat yang pertama dan yang kedua.
‫Jadi mari kita coba itu.
‫Oke.
‫Kirim yang ini dan sekarang di sini di
‫output kami, saya benar-benar mendapatkan ketiganya.
‫Jadi itu tidak masuk akal, tapi bagaimanapun juga
‫poin yang ingin saya sampaikan di
‫sini adalah kita tidak boleh
‫menggunakan pre, tetapi kita harus menggunakan post save middleware, oke.
‫Dan itu karena di pra
‫simpan, ulasan saat ini
‫belum benar-benar ada dalam koleksi.
‫Jadi oleh karena itu, ketika kita kemudian melakukan pencocokan
‫ini di sini seharusnya tidak dapat muncul di
‫output di sini, karena sekali
‫lagi pada saat ini belum benar-benar disimpan ke dalam koleksi, oke.
‫Jadi yang terbaik adalah menggunakan
‫posting di sini, karena pada saat
‫itu, tentu saja, semua dokumen sudah disimpan dalam database
‫dan saat itulah saat
‫yang tepat untuk benar-benar melakukan perhitungan ini dengan semua ulasan
‫dan kemudian menyimpan hasilnya di tur .
‫Oke, jadi saya tidak
‫begitu yakin mengapa yang satu ini benar-benar muncul
‫pada saat ini, tapi mari kita coba sekarang dengan yang lain.
‫Jadi itulah yang keempat, dan
‫sekarang kita mendapatkan berikutnya bukan fungsi dan memang seperti yang saya
‫sebutkan sebelumnya bahwa middleware posting tidak
‫mendapatkan akses ke berikutnya dan oleh
‫karena itu, kami tentu saja tidak dapat menyebutnya, tidak dapat
‫menggunakannya.
‫Baiklah, dan jadi di sini kita memiliki peringkat berikutnya,
‫oke.
‫Jadi sekarang muncul di sini juga.
‫Jadi kami tidak membutuhkan itu dan sekarang kami dapat dengan
‫aman mencoba menghitung statistik kami di sini.
‫Cobalah, dan mari kita hapus
‫semua ulasan ini.
‫Jadi pada dasarnya saya ingin memulai dari awal, oke.
‫Jadi
‫kelima ulasan di sini harus pergi dan
‫sekarang kami siap untuk pergi.
‫Jadi mari kita buat yang ini sebagai
‫yang pertama dan sekarang mari kita lihat statistik kita dan
‫ini dia.
‫Jadi ini adalah ID tur
‫saat ini maka jumlah peringkat adalah
‫satu dan rata-rata tentu saja tiga.
‫Jadi jika kita menambahkan satu lagi dengan peringkat lima baik
‫maka rata-rata harus empat dan kami
‫harus memiliki jumlah peringkat sama dengan dua.
‫Jadi mari kita coba itu dan memang seperti yang saya
‫katakan dua peringkat, rata-rata empat.
‫Dan hanya satu lagi hanya untuk memastikan, mari tambahkan
‫satu lagi dengan
‫lima, dan ini dia.
‫Besar.
‫Jadi kami sekarang menghitung statistik dengan benar, tetapi
‫tentu saja statistik tersebut belum
‫disimpan ke dokumen tur saat ini.
‫Jadi jika kita datang ke sini di Kompas untuk tur yang
‫baru saja kita buat,
‫mungkin itu yang terakhir di sini.
‫Yap, jadi tur pengujian kami, masih memiliki nilai
‫default 4 ini. 5 dan nol,
‫oke.
‫Jadi sekarang saatnya untuk benar-benar
‫mempertahankan statistik yang dihitung ke dalam dokumen tur
‫ini, oke.
‫Jadi mari kita lakukan itu.
‫Pertama-tama, untuk bisa melakukan
‫itu kita perlu model tur, kan.
‫Jadi tur
‫membutuhkan dan
‫di sana kita pergi.
‫Jadi yang perlu kita lakukan pada dasarnya adalah
‫menemukan tur saat ini dan kemudian memperbaruinya.
‫Jadi kami melakukannya berkali-kali, findById
‫dan perbarui, oke.
‫Dan ID tersebut tentu saja adalah tour ID yang
‫dilewatkan ke dalam fungsi dan
‫kemudian menjadi objek data yang sebenarnya ingin kita perbarui.
‫Jadi mari kita dapatkan nama bidang ini dari sini.
‫Jadi kami memiliki peringkatQuantity di
‫satu sisi.
‫Mari kita taruh di sini menjadi satu untuk saat
‫ini agar kita tidak mendapatkan
‫kesalahan dan peringkat Rata-rata.
‫Sekali lagi, untuk mencegah kesalahan,
‫karena sekarang saya ingin
‫datang ke sini dan melihat statistik ini.
‫Jadi Anda lihat sebenarnya mereka disimpan dalam array, oke.
‫Jadi kita perlu pergi ke posisi pertama dari array itu, di
‫mana objek ini berada.
‫Jadi statistik di posisi nol
‫dan kemudian dari sana kita mendapatkan properti peringkat akhir,
‫oke.
‫Jadi yang ini di sini.
‫Dan tentu saja sama untuk peringkat rata-rata.
‫Oke.
‫Dan sekarang kita juga perlu menunggunya.
‫Jadi seperti biasa ini mengembalikan premis dan kita bisa menunggunya.
‫Sekarang kita juga bisa menyimpan hasil ini ke sebuah variabel,
‫tapi kita tidak benar-benar membutuhkan tur sama sekali.
‫Yang ingin kami lakukan hanyalah memperbaruinya,
‫jadi kami tidak
‫menyimpan nilai hasil premis di mana pun.
‫Oke.
‫Jadi mari kita coba menambahkan ulasan lain di sini, kali
‫ini dengan satu yang mengerikan.
‫Oke.
‫Dan pertama-tama, mari kita lihat statistiknya.
‫Jadi tentu saja kita mendapat rating empat, jadi jumlah
‫ratingnya, dan rata-ratanya 3. 5.
‫Jadi sekarang untuk benar-benar melihat apakah itu
‫berhasil mari kita periksa Kompas atau kita juga bisa
‫menggunakan atau mendapatkan titik akhir
‫tur, oke.
‫Jadi kita butuh tour ID, yang bisa
‫kita copy dari sini, paste di sini, dan
‫sekarang tiba saatnya dan memang berhasil,
‫sempurna.
‫Jadi itu luar biasa, benar-benar fantastis.
‫Sekali lagi hanya untuk bersenang-senang mari tambahkan
‫ulasan lain di sini.
‫Oke.
‫Perbarui yang ini, jadi sekarang kami mendapatkan
‫lima dan rata-rata kami naik sedikit.
‫Besar.
‫Jadi sekarang mari kita luangkan waktu sejenak dan rekap apa yang kita lakukan di sini.
‫Jadi kami mulai dengan membuat metode statis.
‫Jadi seluruh fungsi
‫di sini pada dasarnya membuat
‫statistik rata-rata dan jumlah peringkat untuk
‫ID tur yang ulasan saat ini dibuat, oke.
‫Dan kami membuat fungsi ini sebagai
‫metode statis, karena kami perlu memanggil fungsi agregat
‫pada model.
‫Jadi dalam metode statis ke variabel ini memanggil
‫persis ke suatu metode.
‫Jadi itu sangat berguna dalam kasus ini.
‫Jadi kami membangun saluran agregasi kami di sini di
‫mana kami memilih semua ulasan yang cocok
‫dengan ID tur saat ini, dan kemudian mereka dihitung,
‫statistik untuk semua ulasan ini.
‫Kemudian setelah itu
‫selesai kami menyimpan statistik ke tur saat ini, oke.
‫Kemudian untuk benar-benar menggunakan
‫fungsi ini kita menyebutnya setelah review baru dibuat, oke.
‫Untuk itu kita perlu menggunakan ini. konstruktor karena
‫inilah yang menunjuk ke model saat ini.
‫Sekarang ingat bagaimana kami mengatakan bahwa kami
‫juga ingin memperbarui statistik setiap kali ulasan diedit atau dihapus,
‫karena tindakan ini,
‫tentu saja, juga akan memengaruhi jumlah dan rata-rata.
‫Namun, melakukannya sedikit lebih kompleks.
‫Jadi karena video ini sudah berjalan cukup lama, mari
‫kita lanjutkan ke yang berikutnya.