‫Pembicara: Sekarang mari kita terus bekerja pada API kita.
‫Di video berikutnya, kami
‫akan menerapkan beberapa fitur API
‫umum yang membuat API lebih mudah dan menyenangkan digunakan
‫oleh siapa pun yang akan menggunakannya.
‫Dan dalam
‫kuliah ini, kita akan mulai dengan penyaringan.
‫Jadi sekali lagi, fitur pertama yang akan kita
‫terapkan adalah mengizinkan pengguna untuk memfilter data
‫menggunakan string kueri.
‫Biarkan saya memberi tahu Anda apa yang digunakan string kueri Postman.
‫Jadi, mari kita tutup semua ini.
‫Baik.
‫Sebenarnya di mana pemfilteran akan masuk akal ada di
‫sini di rute dapatkan semua tur ini.
‫Karena, inilah yang,
‫seperti namanya, mendapatkan semua tur.
‫Jadi di sini, kami ingin mengizinkan pengguna untuk memfilter
‫data, sehingga alih-alih mendapatkan semua data,
‫dia hanya mendapatkan data yang cocok dengan filter.
‫Seperti ini, kami pada dasarnya dapat mengizinkan pengguna untuk
‫menanyakan data dengan cara yang sangat mudah.
‫Sekali lagi, menggunakan string kueri.
‫Dan string kueri terlihat seperti ini.
‫Dan saya yakin Anda pernah melihatnya.
‫Jadi kita mulai dengan tanda tanya,
‫dan kemudian kita cukup menentukan beberapa pasangan nilai bidang.
‫Jadi katakanlah kita
‫ingin memfilter untuk durasi yang sama dengan lima
‫dan pada saat yang sama, kesulitan mudah.
‫Jadi kita bisa dengan mudah membuat string kueri seperti ini.
‫Jadi sekali lagi, ini dimulai dengan tanda
‫tanya ini, dan kemudian kita
‫dapat menentukan sebanyak mungkin pasangan nilai kunci menggunakan format ini.
‫Dan sekarang aplikasi Postman
‫kami di sini benar-benar mengenali ini dan
‫pada dasarnya mem-parsing string ini di sini dan
‫meletakkan kunci dan nilainya di sini di tab Params ini.
‫Jadi kita juga bisa menentukan kunci dan nilai di sini.
‫Jadi katakanlah uji, setel ke dua puluh tiga, dan Anda
‫lihat di sini bahwa
‫itu benar-benar menambahkannya ke string kueri.
‫Jadi itu cara yang sangat bagus dari Postman membantu kami di sini.
‫Karena sekarang kami dapat, misalnya, saat kami
‫melakukan pengujian, kami dapat mengaktifkan dan menonaktifkannya dan Anda melihat
‫bahwa string kueri
‫di sini bereaksi sesuai dengan itu.
‫Bagaimanapun, kita sekarang membutuhkan cara untuk mengakses data ini yang ada
‫dalam string kueri, dalam aplikasi Express kita.
‫Tapi, untungnya bagi kami,
‫itu sangat mudah, karena Express sudah mengurusnya.
‫Jadi itu hanyalah salah satu dari
‫banyak hal yang dilakukan Express untuk kami agar pengembangan
‫NodeJS benar-benar lebih cepat.
‫Jadi izinkan saya menunjukkannya kepada Anda di sini, sebenarnya di konsol.
‫Jadi data ini berdasarkan permintaan, yang masuk akal, dan kemudian
‫ada di bidang yang disebut kueri.
‫Jadi permintaan dot query kemudian harus memberi
‫kita objek yang diformat dengan baik dengan data dari
‫string kueri.
‫Berikan simpanan.
‫Dan perhatikan, bagaimana saya
‫sebenarnya menambahkannya ke fungsi get all tours handler.
‫Jadi sekali lagi, kami melakukan penyaringan semacam ini di
‫rute di mana kami ingin mendapatkan semua tur.
‫Mari kita uji sekarang dengan string kueri yang tepat ini.
‫Mengirim permintaan.
‫Dan kembali, di sini kita mendapatkan objeknya.
‫Mari kita membuat ini di sini lebih besar sehingga
‫Anda dapat melihat.
‫Itu tidak benar-benar bekerja.
‫Jadi terkadang saya tahu beberapa orang tidak
‫dapat melihat bagian bawah layar.
‫Biarkan saya melakukannya lagi di sini.
‫Jadi, ini dia.
‫Kami memiliki objek, yang memiliki durasi diatur ke lima
‫dan kesulitan diatur ke mudah.
‫Jadi Anda melihat bahwa Express, dengan
‫sangat baik, menguraikan string itu menjadi objek ini, yang mudah digunakan.
‫Sekarang satu hal yang saya perhatikan di sini
‫adalah bahwa kita sebenarnya kehilangan log yang
‫lebih mudah kita dapatkan di sini di konsol.
‫Mari kita lihat mengapa itu terjadi.
‫Jadi untuk beberapa alasan, kita sekarang memiliki aplikasi
‫sebelum kita benar-benar membaca variabel lingkungan.
‫Dengan begitu, aplikasi tidak mendapatkan akses ke sana.
‫Saya pikir saya telah memperbaiki ini sebelumnya, tetapi
‫untuk beberapa alasan sekarang kembali.
‫Berikan simpanan lain di sini.
‫Dan saya akan mencobanya lagi.
‫Sekarang kita mendapatkan logging kita kembali.
‫Dapatkan permintaan ke URL ini dan kemudian dengan sisa
‫data ini di sini.
‫Bagaimanapun, sekarang mari kita benar-benar
‫menggunakan data itu untuk mengimplementasikan pemfilteran kita.
‫Tetapi sebelum kita bisa melakukannya, saya perlu memberi tahu
‫Anda bahwa di Mongoose, sebenarnya ada dua cara
‫untuk menulis kueri basis data.
‫Yang pertama adalah hanya menggunakan objek
‫filter seperti yang kita lakukan di bagian pengenalan MongoDB.
‫Benar? Ingat bahwa?
‫Cara kedua adalah dengan menggunakan beberapa metode khusus luwak.
‫Biarkan saya, sangat cepat, menunjukkan itu kepada Anda.
‫Dengan objek filter, kita akan melakukannya seperti ini.
‫Kita mulai dengan find di sini, dan kemudian di
‫sana kita bisa melewatkan objek filter.
‫Dan itu sudah saya sebutkan sebelumnya.
‫Sekali lagi, ini bekerja dengan cara yang
‫sama persis dengan kueri MongoDB normal.
‫Kita sekarang bisa mengatakan, durasi mengaturnya
‫menjadi lima.
‫Dan
‫kemudian, kesulitan, atur menjadi mudah.
‫Itu persis string kueri yang kami miliki sebelumnya, dan sekarang
‫saya sulit mengkodekannya di sini hanya
‫untuk menunjukkan kepada Anda dua cara berbeda
‫dalam menulis kueri di Mongoose.
‫Mari kita uji yang satu ini.
‫Anda lihat bahwa sekarang, kami hanya mendapatkan dua hasil.
‫Mari beri diri kita ruang di sini.
‫Baik.
‫Kita lihat dua hasil dan memang
‫keduanya memiliki durasi
‫lima, jadi di sini dan di sini, dan keduanya mudah.
‫Mudah dan mudah.
‫Jadi filter kami bekerja dengan baik.
‫Itu adalah cara pertama menulis kueri.
‫Cara biasa yang sudah biasa kita lakukan, tapi
‫ada cara lain.
‫Biarkan saya menunjukkan itu kepada Anda juga.
‫Sekali lagi, kita memulai dengan cara yang sama
‫persis, tetapi kemudian perbedaannya adalah
‫kita mulai merangkai beberapa metode Mongoose khusus untuk
‫pada dasarnya membangun kueri yang mirip dengan yang kita miliki ini.
‫Jadi kita
‫katakan,
‫di mana
‫durasinya sama dengan lima.
‫Kemudian juga, dimana
‫kesulitan yang harus
‫di tandai sama
‫dengan
‫mudah.
‫Permintaan ini di sini akan sama
‫persis dengan yang ini, tetapi sekali lagi,
‫ditulis menggunakan metode Mongoose khusus.
‫Dan tentu saja ada banyak metode lainnya.
‫Misalnya, alih-alih sama dengan, kita dapat memiliki kurang dari, atau
‫sama, atau hanya kurang dari, atau Anda
‫juga dapat mengurutkan hasil atau membatasi jumlah hasil, dan
‫segala macam hal.
‫Yang pasti, kita akan menggunakan beberapa di
‫antaranya dalam beberapa video berikutnya.
‫Ini mungkin terlihat agak aneh bagi
‫Anda, tetapi sebenarnya ini sangat, sangat berguna dalam beberapa kasus.
‫Hanya untuk menguji, coba lagi untuk yang ini.
‫Dan memang kami mendapatkan dua hasil yang sama.
‫Sekarang, izinkan saya mengomentari yang satu ini di sini.
‫Saya akan meninggalkannya di sini hanya sebagai
‫referensi, karena sekarang, kita akan menggunakan metode ini di sini.
‫Dan kita akan menggunakannya, karena
‫sebenarnya, kita sebenarnya sudah memiliki objek yang
‫terlihat seperti ini.
‫Dan itu adalah permintaan titik permintaan.
‫Jika Anda membandingkannya, objek ini, dengan
‫objek yang Anda lihat di bawah ini,
‫terlihat persis sama dengan yang ini.
‫Untuk menerapkan filter yang
‫sangat sederhana, yang harus kita lakukan dalam hal ini adalah, req dot query.
‫Mari kita coba itu sekali lagi.
‫Singkirkan ini di sini.
‫Dan memang kita mendapatkan dua hasil yang sama persis.
‫Sekarang mari kita coba saja dengan kesulitan diatur ke mudah.
‫Sekarang kita mendapatkan empat hasil.
‫Semuanya tentu akan memiliki
‫kesulitan yang diatur menjadi mudah.
‫Filter kami, filter paling dasar kami,
‫sekarang benar-benar berfungsi.
‫Sekarang, masalah dengan
‫implementasi ini, sebenarnya terlalu sederhana.
‫Itu karena, nanti, kita akan
‫memiliki parameter kueri lainnya.
‫Misalnya, sortir, untuk fungsi pengurutan, atau
‫halaman, untuk pagination.
‫Kita perlu memastikan
‫bahwa kita tidak menanyakan ini di database kita.
‫Misalnya, jika kita menambahkan
‫di sini, halaman, sama dengan dua, maka
‫kita tentu saja tidak akan mendapatkan hasil apa pun.
‫Biarkan saya menunjukkan itu kepada Anda.
‫Dan memang kami tidak mendapatkan hasil
‫apa pun, karena tidak ada dokumen di koleksi
‫ini di mana halaman diatur ke dua.
‫Kami hanya ingin menggunakan parameter ini di sini,
‫atau bidang ini, halaman, untuk menerapkan pagination dan bukan
‫untuk benar-benar melakukan kueri dalam database.
‫Jadi yang harus
‫kita lakukan adalah, pada dasarnya mengecualikan nama bidang khusus
‫ini dari string kueri kita sebelum kita benar-benar melakukan pemfilteran.
‫Sekarang mari kita lanjutkan dan terapkan itu.
‫Apa yang akan kita lakukan
‫adalah, pertama, membuat salinan dangkal dari objek permintaan titik permintaan.
‫Sebut saja objek kueri.
‫Di sini kita perlu, sungguh, hard copy.
‫Kami tidak bisa hanya melakukan, permintaan dot query, karena
‫kemudian, jika Anda akan
‫menghapus sesuatu dari objek ini, kami juga
‫akan menghapusnya dari objek permintaan dot query.
‫Dan itu karena
‫dalam JavaScript, ketika kita menetapkan variabel ke objek lain,
‫variabel baru itu pada dasarnya hanya akan
‫menjadi referensi ke objek asli itu.
‫Jadi kami sangat membutuhkan hard copy di sini.
‫Dalam JavaScript, sebenarnya tidak ada cara bawaan
‫untuk melakukan ini, tetapi trik yang sangat bagus
‫yang dapat kita gunakan, karena ES6, adalah dengan menggunakan, pertama, penataan yang kita
‫gunakan dengan menggunakan dot dot dot.
‫Dan kemudian kita cukup membuat objek
‫baru dari itu.
‫Seperti ini.
‫Penataan di sini, tiga titik
‫ini, pada dasarnya akan mengeluarkan semua bidang dari objek.
‫Di sini dengan kurung
‫kurawal, kita cukup membuat objek baru.
‫Jadi kami memiliki objek baru
‫yang pada dasarnya akan berisi semua pasangan
‫nilai kunci yang ada di objek kueri req dot kami.
‫Jadi itu salinan.
‫Sekarang mari kita buat sebuah array
‫dari semua field yang ingin kita kecualikan.
‫Saya menyebut bidang yang dikecualikan itu.
‫Dan kemudian kami ingin mengecualikan halaman, jadi itu
‫yang baru saja
‫saya katakan sebelumnya di Postman.
‫Kemudian, kami juga ingin
‫mengecualikan pengurutan,
‫kami ingin mengecualikan
‫batas, dan kami ingin mengecualikan bidang.
‫Kami akan menerapkan semua fungsi
‫paging, menyortir, membatasi, dan memilih hanya
‫beberapa bidang tertentu, nanti di beberapa
‫video berikutnya.
‫Selanjutnya, yang perlu kita lakukan pada
‫dasarnya adalah menghapus semua bidang ini dari
‫objek kueri kita.
‫Dan untuk melakukan
‫itu, kita akan mengulang bidang-bidang ini.
‫Jadi, kecualikan
‫bidang untuk masing-masing.
‫Dan kami menggunakan untuk
‫masing-masing karena kami tidak ingin menyimpan array baru.
‫Kemudian masing-masing elemen ini,
‫kita dapat menggunakan operator delete.
‫Dan kemudian dari
‫objek kueri, kami ingin menghapus bidang
‫dengan nama elemen, jadi
‫elemen saat ini dalam array.
‫Seperti ini, pertama-tama kita akan menghapus bidang halaman,
‫lalu pengurutan, lalu batas, lalu bidang.
‫Tentu saja, hanya untuk berjaga-jaga jika itu ada.
‫Jika ada, misalnya, bidang tanpa
‫batas, tentu saja, itu tidak akan dihapus, karena
‫tidak ada.
‫Sekarang mari kita lihat apakah ini benar-benar berfungsi.
‫Saya akan mencatat permintaan titik
‫permintaan dan pada saat yang sama objek kueri kami.
‫Memberikan ini menyelamatkan.
‫Jangan khawatir tentang hasil kami sekarang.
‫Yang ingin saya lihat hanyalah
‫objek kueri kita, hanya untuk memastikan bahwa logika
‫yang kita miliki di sini benar-benar berfungsi.
‫Mari kita tambahkan semacam di sini satu dan batas 10.
‫Ini akan lebih masuk akal nanti.
‫Untuk saat ini, saya
‫hanya menambahkannya, sehingga nanti saya dapat mengecualikannya.
‫Hasil tidak penting, yang penting, adalah bahwa
‫kueri asli kita adalah yang ini di sini, dan kemudian
‫objek kueri kita, yang akan kita
‫gunakan, hanya
‫memiliki kesulitan untuk disetel menjadi mudah.
‫Itu karena kami mengecualikan, halaman, mengurutkan, dan membatasi.
‫Ini sekarang berfungsi, jadi alih-alih menggunakan
‫kueri req dot, kita akan menggunakan objek kueri kita.
‫Mari kita singkirkan itu dan coba lagi.
‫Sekarang kita harus kembali
‫ke query untuk semua dokumen
‫yang memiliki kesulitan diatur ke mudah dan mengabaikan semua bidang lainnya.
‫Kirim itu.
‫Dan memang, kami kembali
‫ke empat hasil yang kami miliki sebelumnya.
‫Kami juga dapat mengaktifkan durasi, dan memang, kami
‫sekarang akan memiliki dua hasil.
‫Ingat bahwa?
‫Dan jika kita mematikan ini,
‫maka tentu saja itu akan bekerja dengan cara yang sama.
‫Mari kita hapus baris kosong ini di sini.
‫Jadi, memang, dengan string kueri asli kami, semuanya
‫jelas juga masih berfungsi sama.
‫Kami menyiapkan fitur filter kami
‫sehingga mengabaikan bidang halaman, pengurutan, dan batas.
‫Namun sebenarnya ada hal lain
‫yang perlu kita lakukan dalam kode kita,
‫agar pada dasarnya dapat menerapkan fitur ini di video mendatang.
‫Mari kembali ke sini ke kode kita.
‫Jadi sekarang mari kita
‫belajar sedikit tentang cara kerja kueri di Mongoose.
‫Saya pikir saya telah
‫menyebutkan ini sebelumnya, tetapi sangat penting untuk membicarakannya lagi.
‫Metode find ini di sini akan mengembalikan kueri.
‫Semua ini di sini akan mengembalikan kueri.
‫Dan itulah alasan mengapa kita
‫kemudian dapat menghubungkan metode lain seperti ini.
‫Seperti di mana, sama, dan semua metode lain yang
‫saya bicarakan dengan Anda sebelumnya.
‫Biarkan saya benar-benar menunjukkannya kepada Anda dalam dokumentasi lagi.
‫Di sini kita memiliki objek
‫kueri, dan sekali lagi, ketika kita
‫menggunakan metode find, itu akan mengembalikan objek yang merupakan kueri.
‫Jadi dalam prototipe titik kueri,
‫kami kemudian memiliki semua metode ini.
‫Misalnya, di sini kita memiliki di mana, yang baru
‫saja saya sebutkan.
‫Kami memiliki sortir mana
‫yang akan digunakan nanti untuk menyortir.
‫Kami memiliki, mari kita lihat, kami memiliki kurang
‫dari atau kurang dari sama, kami memiliki lebih besar.
‫Kita punya...
‫Apa lagi yang kami gunakan?
‫Kami menggunakan persamaan.
‫Semua ini adalah bagian dari prototipe titik kueri.
‫Yang, sekali lagi, merujuk ke
‫objek yang kita buat menggunakan kelas kueri.
‫Sekali lagi, inilah alasan
‫mengapa kita bisa melakukan chaining semacam ini.
‫Sekarang sampai pada bagian penting.
‫Segera setelah kami benar-benar
‫menunggu hasil kueri, maka segera setelah kami
‫gunakan, tunggu di sini atau di sini, misalnya.
‫Segera setelah kami menggunakan ini
‫wait, kueri kemudian akan dieksekusi
‫dan kembali dengan
‫dokumen yang benar-benar cocok dengan kueri kami.
‫Jika kita melakukannya seperti ini, seperti yang kita
‫miliki di sini, maka sekarang
‫ada cara, nanti, menerapkan pengurutan, atau pagination,
‫atau semua fitur lainnya.
‫Alih-alih, yang harus kita
‫lakukan adalah menyimpan bagian ini di sini ke dalam kueri,
‫lalu pada akhirnya, segera setelah kita mengubah semua metode
‫ke kueri yang kita perlukan, baru
‫pada akhirnya, kita bisa menunggu itu pertanyaan.
‫Misalnya, kita akan menggunakan metode sortir.
‫Kami akan menggunakan
‫metode prediksi, kami akan menggunakan metode batas,
‫dan kami akan menggunakan, sungguh, banyak
‫metode, dan menghubungkannya ke kueri ini.
‫Itu tidak mungkin
‫dilakukan, sekali lagi, jika kita menunggu hasil dari
‫query awal ini di sini, segera.
‫Saya harap itu masuk akal.
‫Cara yang akan kami lakukan
‫adalah kami
‫akan mengadakan tur di sini.
‫Dan ini akan menunggu permintaan.
‫Kuerinya adalah, yah, sekadar kueri tanpa
‫menunggu apa pun.
‫Hanya untuk membuatnya konsisten dengan bagian ini
‫di sini, mari
‫kita lakukan seperti ini.
‫Katakanlah,
‫pertama, kita membuat
‫kueri dan kemudian menjalankan kueri.
‫Itu tidak benar.
‫Karena kita melakukan komentar
‫di sini,
‫katakanlah kirim tanggapan.
‫Hanya untuk membuat kode kita sedikit lebih mudah dipindai.
‫Saya harap semua
‫ini masuk akal, ini ternyata menjadi
‫video yang cukup panjang, tetapi
‫penting untuk menyelesaikan bagian ini di sini
‫dengan menjelaskan logika ini kepada Anda di
‫sini, sehingga di video berikutnya, kami
‫kemudian dapat menerapkan sisa fitur.
‫Karena, sekali lagi, tanpa
‫seperti ini, tidak akan berhasil.