‫Narator: Dalam video ini, kita
‫akan berbicara tentang middleware Mongoose tipe kedua,
‫yaitu query middleware.
‫Dan, seperti namanya, query
‫middleware memungkinkan kita untuk menjalankan fungsi sebelum
‫atau setelah query tertentu dieksekusi.
‫Jadi sekarang mari kita tambahkan
‫hook pre-find, jadi pada dasarnya, middleware
‫yang akan berjalan sebelum query find dieksekusi.
‫Jadi mari kita tambahkan komentar lain di sini.
‫Jadi ini adalah middleware kueri.
‫Dan tentu saja, ini bekerja dengan cara yang sangat
‫mirip seperti sebelumnya.
‫Jadi tourSchema, dan kemudian pra, dan di sini
‫kita mendefinisikan hook, yang akan menjadi
‫"find. "
‫Jadi, fungsi, dan sekali lagi, kami
‫memiliki akses ke fungsi berikutnya.
‫Dan sebenarnya, mari kita mulai dengan
‫menyebutnya di sini di akhir agar kita tidak melupakannya.
‫Oke, jadi Anda lihat, tampilannya
‫persis seperti middleware lainnya,
‫pre-hook lainnya.
‫Satu-satunya perbedaan di sini adalah kait pencarian ini,
‫yang akan membuat middleware kueri ini
‫dan bukan middleware dokumen.
‫Baiklah?
‫Jadi, perbedaan besar di sini adalah
‫bahwa kata kunci this sekarang akan mengarah pada kueri saat ini dan bukan
‫pada dokumen saat ini, karena
‫kami tidak benar-benar memproses dokumen apa pun di sini.
‫Kami benar-benar akan memproses kueri.
‫Oke?
‫Dan kasus penggunaan yang akan kita lakukan di sini adalah ini.
‫Jadi misalkan kita dapat memiliki
‫tur rahasia di database kita, seperti
‫untuk tur yang hanya ditawarkan secara internal, atau
‫untuk sekelompok orang VIP yang sangat kecil, seperti, dan
‫yang tidak boleh diketahui oleh publik.
‫Sekarang, karena tur ini bersifat
‫rahasia, kami tidak ingin tur rahasia tersebut muncul di
‫output hasil.
‫Benar?
‫Jadi yang akan kita lakukan adalah membuat bidang
‫tur rahasia dan kemudian hanya menanyakan tur yang tidak rahasia.
‫Baiklah?
‫Jadi, mari kita lakukan itu.
‫Mulailah dengan menambahkan di sini, dan mari kita lakukan tepat di akhir.
‫secretTour, jadi tipenya harus Boolean, dan saya pikir ini
‫pertama kalinya
‫kami benar-benar menggunakan Boolean,
‫jadi ini bisa benar atau salah.
‫Jadi jika itu benar,
‫maka itu adalah tur rahasia, dan
‫kami tidak ingin itu muncul, dan, secara default, itu salah.
‫Baiklah?
‫Jadi, pada dasarnya, biasanya wisata itu bukan rahasia.
‫Oke.
‫Selanjutnya, mari kita benar-benar melanjutkan dan membuat tur
‫rahasia sehingga kita dapat menguji menggunakannya, oke?
‫Jadi mari kita sebut ini di sini Tur Rahasia Super.
‫Semua ini
‫tidak masalah, dan izinkan saya mengatakan bahwa secretTour memang benar.
‫Oke?
‫Simpan disini...
‫Dan, eh, di mana itu?
‫Ya. Jadi secretTour benar.
‫Dan sekarang mari kita benar-benar menuju ke
‫Kompas dan menghapus semua tur lain yang kita miliki di sana.
‫Jadi, mari kita muat ulang ini ...
‫Dan kemudian, di bawah sini, kita harus...
‫Ya, tur uji ini di sini, kita bisa menghapusnya.
‫Tes tur lagi...
‫Jadi semua kekacauan ini, pada
‫dasarnya, kami ingin menyingkirkannya.
‫Kami hanya menyimpan secretTour di
‫sini sehingga sekarang kami dapat bereksperimen dengannya.
‫Oke, dan Anda lihat di sini bahwa secretTour disetel ke
‫true, sementara yang
‫lain, tentu saja, tidak
‫memiliki atribut ini, karena, pada saat
‫kami membuatnya, kami belum memiliki secretTour.
‫Jadi, sekarang, sebelum kita mulai,
‫kembali ke Postman, mari kita pastikan bahwa, memang, tur
‫terakhir di sini, dan sebenarnya ini bukan tur terakhir, jadi
‫di mana itu?
‫Oh, itu yang pertama.
‫Jadi di sini kita memiliki Tur Rahasia Super,
‫tentu saja, disetel menjadi kenyataan.
‫Baiklah? Jadi, mundur sekarang, sekarang mari kita
‫jalankan kueri seperti yang baru saja
‫kita katakan di awal.
‫Jadi, sekali lagi, perlu diingat bahwa ini
‫sekarang adalah objek kueri, oke?
‫Jadi kami dapat menghubungkan semua metode yang
‫kami miliki untuk kueri.
‫Jadi cukup tambahkan metode find di sini, dan
‫kemudian pada dasarnya
‫pilih semua dokumen di mana secretTour tidak benar, oke?
‫Jadi secretTour ...
‫Dan kemudian tidak sama dengan benar.
‫Dan saya melakukannya seperti ini
‫karena, ingat, editor saat ini tidak disetel ke false.
‫Mereka tidak memiliki atribut ini.
‫Baiklah?
‫Oke, jadi mari kita uji sekarang lagi.
‫Dan jadi sekarang harus hilang di sini.
‫Dan memang, itu tidak lagi di sini.
‫Oke, kami memiliki semua tur yang tidak rahasia,
‫tetapi bukan tur rahasia.
‫Dan sekarang saya melihat bahwa
‫kita sebenarnya memiliki secretTour yang disetel ke
‫false di sini, tapi itu benar-benar hanya
‫masalah Mongoose, jadi mari kita lihat lagi di sini di Compass, dan
‫muat ulang.
‫Jadi Anda melihat bahwa, sebenarnya,
‫dalam database, secretTour tidak disetel ke false.
‫Luwak hanya menambahkan itu karena kami memilikinya di
‫skema kami sebagai default, dan itu tidak ada di database.
‫Jadi pada dasarnya, kemudian, meletakkannya di sana.
‫Jadi Anda lihat bahwa kami sebenarnya memiliki
‫11 dokumen, tetapi kemudian di Postman kami hanya mendapatkan sepuluh hasil.
‫Dan itu,
‫tentu saja, karena Tur Rahasia kami pada dasarnya disaring.
‫Oke?
‫Jadi, mari kita coba memahami lagi
‫apa yang sebenarnya terjadi.
‫Jadi segera setelah kita mencapai rute ini, di
‫sini, dengan menggunakan metode
‫get, mari kita lihat apa yang terjadi.
‫Jadi, yang terjadi adalah kita membuat query
‫menggunakan tour. Temukan.
‫Oke?
‫Dan kemudian, tentu saja, kami menghubungkan semua metode
‫ini ke sana seperti yang kami bicarakan di salah
‫satu kuliah terakhir,
‫dan kemudian, pada akhirnya, kami kemudian menjalankan kueri itu di sini dengan menggunakan menunggu.
‫Benar? Ingat bahwa?
‫Jadi di sinilah kita mengeksekusi query.
‫Tapi, sebelum benar-benar
‫dieksekusi, maka, middleware pra-temukan kami di sini dieksekusi.
‫Oke?
‫Dan itu dieksekusi karena ditemukan,
‫seperti yang kita gunakan di sini.
‫Benar?
‫Jadi, kami membuat kueri
‫pencarian, dan oleh karena itu, kait pencarian kemudian dieksekusi.
‫Kemudian, di sini, karena ini adalah middleware kueri,
‫kata kunci this menunjuk ke kueri.
‫Jadi, untuk kueri itu, kita
‫kemudian dapat menghubungkan metode find lainnya, bukan?
‫Dan di sana, kami kemudian memfilter secretTour
‫menggunakan objek filter ini.
‫Oke?
‫Jadi pada dasarnya mengatakan bahwa kami hanya
‫ingin tur di mana secretTour tidak sama dengan benar.
‫Dan itu sebenarnya akan bekerja
‫sama jika kita hanya mengatakan di
‫sini, salah, tetapi saya merasa lebih bersih seperti ini.
‫Oke, sekarang hanya ada satu hal yang perlu kita perbaiki,
‫karena saat ini middleware ini
‫berjalan untuk find, tetapi tidak untuk find1.
‫Oke?
‫Jadi izinkan saya menunjukkan kepada Anda masalah yang mungkin kita dapatkan dengan itu.
‫Jadi, uh, mari kita ambil ID Tur Rahasia.
‫Jadi kami memiliki
‫Tur Rahasia di sini, dan itu adalah ID-nya, dan jika kami mendapatkan tur,
‫maka itu akan memberi kami Tur Super Rahasia di sini.
‫Benar?
‫Jadi Anda lihat, bahwa
‫filter yang baru saja kita buat
‫di middleware tidak berfungsi untuk perintah ini.
‫Oke?
‫Dan itu karena fungsi pegangan untuk
‫rute ini, seperti
‫yang mungkin Anda ingat, menggunakan findByID, yang, di balik
‫layar, adalah find1, sehingga berbeda dari find.
‫Baiklah?
‫Jadi, kita perlu menentukan middleware yang sama juga untuk find1.
‫Sekarang, ada dua
‫cara untuk melakukannya, dan yang pertama
‫adalah melanjutkan, menyalin kode ini, lalu meletakkan find1 di sini.
‫Tapi itu tidak terlalu bagus,
‫jadi sebagai gantinya kita akan menggunakan ekspresi reguler.
‫Dan itu cukup mudah, dan begitu ...
‫Dan biarkan saya benar-benar menduplikasi
‫ini di sini,
‫mengomentari bagian ini, dan kemudian, ingat, ekspresi reguler
‫dimulai dan diakhiri dengan garis miring.
‫Dan kemudian di sini, yang ingin
‫saya katakan, adalah bahwa
‫middleware ini harus dijalankan tidak hanya
‫untuk find, tetapi untuk semua perintah yang dimulai dengan nama find.
‫Oke?
‫Jadi, temukan, dan temukan1, dan juga temukan1 dan hapus, temukan1 dan
‫perbarui, dan semua
‫ini sekarang akan benar-benar memicu fungsi middleware
‫yang kita miliki di sini.
‫Baiklah?
‫Jadi, tidak perlu untuk itu.
‫Ekspresi reguler di sini jauh lebih baik.
‫Jadi sekali lagi,
‫ini di sini berarti semua string yang dimulai dengan find.
‫Dan sebenarnya, karena kita di sini,
‫izinkan saya menunjukkan kepada Anda dokumentasi Mongoose lagi.
‫Jadi, ketika kita pergi ke sini, ke middleware dalam panduan ini, Anda akan
‫memiliki gambaran umum tentang semua middleware.
‫Misalnya,
‫dokumen middleware adalah yang kita bicarakan
‫sebelumnya, yang berjalan, misalnya, di save.
‫Namun nyatanya, document middleware
‫juga bisa dijalankan untuk hal-hal seperti remove.
‫Baiklah?
‫Atau untuk validasi.
‫Oke, tapi saya tidak membicarakan ini
‫karena biasanya yang selalu kita gunakan hanya untuk simpanan.
‫Sekarang, middleware kueri dapat berjalan untuk semua
‫fungsi kueri ini.
‫Jadi temukan, seperti yang baru saja kita
‫tentukan, dan sekarang, dengan ekspresi
‫reguler kita, itu
‫juga akan berjalan untuk find1,
‫findOneAndDelete, findOneAndRemove, dan findOneAndUpdate.
‫Bagaimanapun, kembali ke Postman sekarang,
‫ini seharusnya memperbaiki situasi ini di sini.
‫Jadi saat kita menjalankan kueri ini,
‫seharusnya tidak ada hasil.
‫Dan memang, tidak.
‫Karena, ingat, kami mencoba mendapatkan secretTour.
‫Jadi tur dengan ID ini di sini
‫adalah rahasia, tetapi kami tidak pernah ingin
‫secretTours muncul di kueri apa pun.
‫Dan itulah mengapa, saat ini, kami mendapatkan hasil nol.
‫Oke?
‫Jadi itu berhasil sekarang.
‫Jangan simpan ini,
‫dan sekarang, kembali ke kode kita.
‫Mari sekarang sebenarnya
‫juga menentukan middleware pos untuk find.
‫Jadi, tourSchema, dan kemudian, seperti sebelumnya, posting, lalu mari kita gunakan ekspresi
‫reguler kita di sini lagi untuk apa
‫pun yang dimulai dengan find.
‫Dan kemudian hanya fungsi
‫biasa, dan kemudian di sini, di middleware
‫pasca-penemuan, kami benar-benar mendapatkan akses ke semua
‫dokumen yang kami kembalikan dari kueri.
‫Jadi sebut saja itu Docs.
‫Baiklah?
‫Jadi, ingat bahwa middleware ini
‫akan berjalan setelah kueri telah dieksekusi.
‫Jadi, oleh karena itu, ia
‫dapat memiliki akses ke dokumen yang dikembalikan.
‫Sekali lagi, karena kueri itu
‫sebenarnya sudah selesai pada saat ini.
‫Jadi mari kita log dokumen-dokumen ini ke konsol, jadi
‫docs,
‫tapi saya juga ingin melakukan sesuatu yang lain di sini.
‫Jadi pada dasarnya, mari kita buat, semacam,
‫jam untuk mengukur berapa lama waktu yang dibutuhkan
‫untuk mengeksekusi kueri saat ini.
‫Baiklah?
‫Jadi, bagaimana kita akan melakukannya?
‫Yah, cukup sederhana.
‫Kita cukup mengatur properti ke objek ini,
‫karena objek kueri ini sebenarnya hanyalah objek biasa.
‫Tentu saja ia memiliki akses ke semua metode ini,
‫seperti find, tetapi
‫kita juga dapat menggunakannya
‫untuk mengatur properti apa pun yang kita inginkan.
‫Jadi, sekali lagi, hanya objek biasa.
‫Dan di sini kita dapat mengatakan ini. mulai
‫harus tanggal saat ini.
‫Oke?
‫Jadi ini akan mengaturnya
‫sebagai waktu saat ini dalam milidetik, oke?
‫Jadi, di sini, di middleware pos, yang akan
‫dijalankan setelah kueri dieksekusi, kita dapat
‫mengurangi waktu saat ini dikurangi
‫waktu mulai.
‫Jadi konsol. log, permintaan
‫mengambil, dan sekarang
‫tanggal saat ini dikurangi
‫ini.
‫mulai, milidetik.
‫Oke, mari kita simpan, jadi
‫sekarang mari kita coba menjalankan kueri dan melihat hasilnya.
‫Oke?
‫Jadi, di sini kita mendapatkan semua tur kita,
‫di sini kita memiliki
‫konsol, dan mari kita perjelas itu.
‫Ada banyak barang di sana.
‫Minta lagi,
‫dan inilah semua hasilnya.
‫Jadi pada dasarnya ini adalah semua tur yang ditemukan,
‫dan itulah hasil dari konsol. log dokumen.
‫Jadi pada dasarnya dokumen yang cocok dengan query.
‫Tapi saya sekarang tertarik dengan konsol pertama ini. log, dan jadi,
‫di sini kita melihat "Kueri membutuhkan waktu 120 milidetik," dan pada
‫dasarnya itu adalah waktu yang
‫berlalu dari awal, di mana kita
‫mendefinisikan ini, hingga setelah kueri dieksekusi, pada titik waktu ini.
‫Baiklah.
‫Dan hanya itu yang harus saya tunjukkan
‫kepada Anda untuk saat ini
‫tentang query middleware, dan
‫seperti sebelumnya, tentu saja kita
‫akan sering
‫menggunakan ini di sepanjang kursus, karena, seperti
‫yang saya sebutkan di awal, middleware benar-benar merupakan
‫konsep dasar itu sangat penting untuk banyak
‫hal yang kita butuhkan dalam aplikasi kita.
‫Jadi kita hampir selesai berbicara tentang middleware.
‫Selanjutnya adalah yang terakhir,
‫yaitu agregasi middleware.