‫Instruktur: Sekarang mari kita gunakan proses
‫yang disebut populate untuk benar-benar mendapatkan akses ke
‫pemandu wisata yang direferensikan setiap kali kita menanyakan tur tertentu.
‫Jadi, di video terakhir, kami
‫membuat referensi ke pengguna, di sini, di bidang panduan
‫ini, tepat di model tur kami, bukan?
‫Dan sekarang kita akan menggunakan populate untuk
‫pada dasarnya mengganti bidang yang kita referensikan
‫dengan data terkait yang sebenarnya.
‫Dan hasilnya akan terlihat
‫seolah-olah data selalu disematkan, padahal sebenarnya
‫seperti yang kita tahu, itu
‫ada dalam koleksi yang sama sekali berbeda, oke?
‫Sekarang, proses mengisi selalu terjadi dalam kueri.
‫Jadi sekarang mari kita pergi ke pengontrol
‫tur kita, dan kemudian langsung ke fungsi di mana kita mendapatkan satu tur.
‫Jadi di sini, di dapatkan tur.
‫Dan inilah pertanyaan kami, bukan?
‫Jadi di sini, di sinilah kami membangun kueri kami.
‫Dan sekarang yang perlu kita lakukan adalah
‫menambahkan populasi ke kueri.
‫Jadi isi, lalu nama bidang yang sebenarnya
‫ingin kita isi
‫dan itu disebut panduan, oke?
‫Dan jika dipikir-pikir, nama ini sebenarnya masuk akal.
‫Jadi kami ingin mengisi jadi pada dasarnya
‫untuk mengisi bidang yang disebut panduan dalam model kami.
‫Benar, jadi sekali lagi, bidang panduan
‫ini hanya berisi referensi.
‫dan dengan mengisi kita kemudian akan
‫mengisinya dengan data yang sebenarnya, baik dan lagi hanya di
‫query dan tidak di database yang sebenarnya, oke?
‫Jadi, ini benar-benar semua yang perlu kita lakukan.
‫Dan sekarang mari kita lihat hasilnya, oke?
‫Jadi, ini adalah id dari tur dan mari kita ingat bahwa
‫ini adalah bagaimana panduan terlihat sekarang, oke?
‫Tapi kalau sekarang kita sudah dapat tour dan dengan
‫id itu, maka kita
‫tunggu saja, dan memang, ini dia data tentang guidenya.
‫Oke, jadi dua elemen yang sudah kita miliki
‫di panduan ini, sekarang telah diisi dengan data sebenarnya.
‫Dan jika sekarang kita melihat pada get
‫all tour, mari kita singkirkan beberapa hal ini di sini.
‫Kami memiliki terlalu banyak barang terbuka di sini.
‫Jadi jika kita sekarang mendapatkan semua tur,
‫oke, maka mari kita gulir ke
‫akhir di mana
‫yang baru seharusnya dan ternyata sekarang baik-baik saja,
‫oh itu karena saya memiliki filter
‫ini di sini, mari kita singkirkan itu, dan sekarang saya memiliki 10 hasil dan
‫sebenarnya itu di sini, jadi tur uji baru.
‫Dan sekarang Anda melihat bahwa di sini ia
‫kembali menunjukkan kepada kita hanya nilai-nilai yang sebenarnya ada dalam database.
‫Jadi mari kita konfirmasikan juga di sini di Kompas.
‫Dan memang, seperti yang Anda lihat, kami masih
‫tidak memiliki data aktual di sini di database, tetapi hanya benar-benar id.
‫Oke, dan hanya langkah mengisi yang kemudian akan mengganti
‫id ini dengan data yang sebenarnya, oke?
‫Jadi di sini, itu tidak
‫terjadi dengan baik karena, kami tidak
‫menerapkan populasi di handler rute get all tours.
‫Oke, sekarang saya akan menunjukkan trik kecil yang bisa
‫kita lakukan dengan fungsi populate.
‫Yang sebenarnya juga hanya memilih bidang tertentu.
‫Jadi misalnya, kami tidak tertarik dengan properti v ini di sini dan
‫juga tidak pada passwordChangedAt kan, jadi bukan
‫itu jenis data
‫yang kami inginkan tentang pemandu wisata kami.
‫Jadi di sini di populate, kita sebenarnya bisa menentukan itu.
‫Jadi alih-alih hanya meneruskan string, kita
‫dapat membuat objek opsi dan kemudian
‫kita dapat
‫mengatakan, jalurnya adalah panduan, jadi pada dasarnya,
‫nama bidang yang ingin kita ganti, dan kemudian, seperti biasa,
‫kita dapat menggunakan
‫pilih , dan kemudian minus, yang ini di sini
‫dan juga, yang lainnya, jadi passwordChangedAt, lebih mudah untuk menyalin,
‫baiklah, jadi mari kita ubah di sini,
‫dan kirim ini lagi.
‫Dan ini tentu saja, bukan rute yang benar, jadi
‫maaf untuk itu, saya pikir saya juga menggunakannya sebelumnya sebenarnya di mana
‫sebenarnya saya ingin menunjukkan yang ini
‫kepada Anda, benar, dan sangat menyesal untuk itu, tapi tetap saja apa
‫yang ingin kami singkirkan dari sini adalah V
‫ini dan passwordChangedAt ini.
‫Dan kami sudah
‫melakukannya, jadi jika kami mengirimnya sekarang,
‫tentu saja kami hanya mendapatkan data yang kami minati.
‫Baiklah, jadi fungsi mengisi ini adalah
‫alat yang sangat mendasar untuk bekerja
‫dengan data di Mongoose.
‫Dan terutama tentu saja
‫ketika ada hubungan antar data,
‫oke, jadi Anda harus selalu tahu persis bagaimana dan
‫kapan menggunakannya untuk aplikasi Anda sendiri.
‫Dan untuk melatihnya, tentu saja kita
‫akan menggunakannya berkali-kali di seluruh bagian ini.
‫Sekarang hanya satu hal yang saya ingin Anda
‫ingat, adalah bahwa di balik layar, menggunakan populate
‫akan tetap benar-benar membuat
‫kueri baru, sehingga ini dapat memengaruhi kinerja Anda.
‫Oke, tentu saja jika Anda hanya melakukannya
‫sekali atau dua kali dan dalam jenis aplikasi kecil, maka pukulan
‫kecil pada kinerja itu bukanlah masalah besar sama sekali.
‫Tetapi dalam aplikasi yang sangat besar, dengan
‫banyak populasi di semua tempat,
‫maka itu mungkin memang memiliki semacam efek, oke?
‫Jadi ingatlah itu.
‫Oke, dan memang masuk akal, kan karena
‫bagaimana lagi Mongoose bisa mendapatkan data tentang
‫tur dan pengguna secara bersamaan.
‫Perlu membuat kueri baru pada dasarnya
‫untuk dapat membuat koneksi ini.
‫Oke dan sekarang hanya untuk menyelesaikan ini,
‫mari kita ingat apa yang
‫saya tunjukkan kepada Anda bahwa ini sebenarnya tidak berhasil ketika kita mendapatkan semua tur.
‫Jadi, ingat bagaimana dalam situasi ini, kami masih
‫hanya mendapatkan id pemandu wisata dan bukan
‫data pengguna yang dirujuk.
‫Oke, dan salah satu solusi pada dasarnya adalah
‫menyalin kode ini di sini, jadi fungsi pengisian ini, juga
‫di sini ke pengendali rute ini,
‫tetapi tentu saja, kode duplikat bukanlah ide yang baik.
‫Dan saya harap Anda
‫sudah tahu pada titik ini tentang cara yang lebih baik untuk melakukan ini.
‫Dan jawabannya adalah query middleware.
‫Oke, jadi mari kita lanjutkan dan pindah ke model kita, dan saya
‫menyalin kode ini di
‫sini sekarang dan, ya, mari kita lakukan di sini.
‫Jadi,
‫pra dan kemudian saya akan benar-benar seperti sebelumnya melakukannya
‫dengan ekspresi reguler, yang kemudian akan bekerja
‫untuk semua yang dimulai dengan find.
‫Jadi, seperti
‫ini, Oke, dan tentu saja, kami melakukan ini di middleware
‫kueri, karena ini adalah jenis
‫middleware yang akan dijalankan setiap kali ada kueri.
‫Benar, mari kita gabungkan semua pra middleware ini
‫dan kemudian setelah itu memiliki pos.
‫Baiklah, jadi izinkan saya menyalin kode yang kita miliki sebelumnya dan sekarang
‫mari kita tambahkan saja ke ini, karena
‫ingat bahwa di middleware
‫kueri, ini selalu menunjuk ke kueri saat ini.
‫Jadi sekarang pada dasarnya semua kueri
‫akan secara otomatis mengisi bidang panduan
‫dengan pengguna yang direferensikan.
‫Oke, jadi sekarang kita bisa menyingkirkannya di sini.
‫Dan ya, itu sebenarnya.
‫Jadi sekarang kita melakukannya di
‫sini, daripada melakukannya di dua tempat, di controller.
‫Jadi ini adalah trik kecil yang bagus jika Anda
‫selalu ingin mengisi semua dokumen Anda.
‫Jadi, mari kita uji.
‫Pertama, jika masih berfungsi di sini.
‫Dan memang benar, jadi kami mendapatkan dua pengguna kami.
‫Dan kemudian mari kita uji di sini yang
‫sebelumnya tidak berfungsi dan sekarang berhasil, jadi inilah hasilnya.
‫Dan sekarang hanya untuk memastikan bahwa itu
‫benar-benar berfungsi, mari kita juga memperbaruinya dan pada dasarnya menambahkan pemandu wisata lain.
‫Jadi mari kita salin id tur di sini lalu perbarui tur jadi
‫kita perlu meletakkan id
‫di sini, lalu di badan mari kita ambil dari create tour,
‫jadi panduan
‫ini, dan taruh di sini, dan
‫kemudian kita juga perlu mendapatkan pengguna lain.
‫Jadi, ini dia di sini, yang sebenarnya bukan panduan
‫atau bahkan bukan admin, tetapi ini masih hanya untuk pengujian,
‫jadi mari kita ambil id
‫ini, lalu lanjutkan dan taruh di sini.
‫Jadi, mari kita perbarui, yang masih berfungsi, dan sekarang sebenarnya,
‫bahkan dalam output ini,
‫kita sudah memiliki data yang terisi.
‫Oke, karena dalam ekspresi reguler kami,
‫ingat, kami menggunakan find.
‫Jadi, pembaruan di sini diimplementasikan menggunakan find by id
‫dan pembaruan, dan juga dimulai dengan find
‫dan oleh karena itu middleware kueri yang sebelumnya
‫juga berlaku untuk fungsi ini.
‫Oke dan begitu, ini adalah cara kerja mengisi.
‫Oke, sekali lagi, alat yang sangat penting di
‫kotak peralatan Mongoose Anda, oke.
‫Dan hanya untuk memastikan,
‫mari kita ambil 15 detik di sini untuk rekap.
‫Jadi ini adalah proses dua langkah.
‫Pertama, Anda membuat referensi ke model lain.
‫Jadi, dengan ini, Anda secara efektif
‫membuat hubungan antara dua kumpulan data ini.
‫Kemudian, pada langkah kedua, Anda mengisi
‫bidang yang baru saja
‫Anda tentukan sebelumnya, jadi panduan menggunakan metode mengisi.
‫Baiklah, sangat sederhana, sangat lugas, yang Anda butuhkan hanyalah
‫benar-benar memahami logika di
‫balik semua ini dan kemudian
‫Anda siap untuk benar-benar mulai menggunakannya.