‫-: Selamat datang kembali di video selanjutnya.
‫Dan mari kita lanjutkan sekarang
‫dengan fitur Mongoose baru dan cukup canggih yang
‫disebut 'Virtual Populate. '
‫Jadi, pada intinya, kami
‫telah mengisi ulasan
‫dengan tur dan data pengguna di sini, bukan?
‫Jadi, saat ini,
‫saat kami meminta ulasan, kami mendapatkan akses ke informasi itu.
‫Namun, itu masih menyisakan satu masalah yang belum terpecahkan.
‫Jadi, bagaimana kita akan mengakses ulasan tentang tur?
‫Jadi pada dasarnya, sebaliknya.
‫Jadi, katakanlah saya menanyakan tur tertentu.
‫Lalu, bagaimana saya bisa
‫mendapatkan akses ke semua ulasan untuk tur itu?
‫Dan masalah ini muncul di sini
‫karena kami melakukan referensi orang tua pada ulasan.
‫Jadi pada dasarnya, memiliki ulasan yang menunjuk
‫ke tur dan bukan tur yang menunjuk ke ulasan.
‫Jadi, seperti yang kami katakan di awal
‫bagian, dalam hal
‫ini, orang tua tidak begitu tahu tentang anak-anaknya.
‫Jadi, dalam
‫contoh ini, tur tidak tahu tentang ulasannya.
‫Dan terkadang, tidak apa-apa.
‫Namun dalam kasus ini, kami
‫sebenarnya ingin tur pada dasarnya mengetahui semua ulasan yang didapat.
‫Sekarang, untuk menyelesaikan ini, dengan
‫apa yang kita ketahui
‫saat ini, kita dapat memiliki dua solusi.
‫Dan yang pertama adalah meminta
‫ulasan secara manual setiap kali kami meminta tur.
‫Tetapi akan sedikit
‫merepotkan jika melakukannya secara manual seperti ini.
‫Dan solusi kedua bisa juga dengan melakukan
‫child reference pada wisata tersebut.
‫Jadi pada dasarnya, simpan larik
‫semua ID ulasan di setiap dokumen tur.
‫Kemudian, yang harus
‫kita lakukan adalah mengisi array itu, bukan?
‫Tapi, kami sebenarnya sudah mengesampingkan melakukan
‫ini pada awalnya
‫karena kami tidak ingin menyimpan
‫array ID ulasan yang kemudian
‫dapat tumbuh tanpa batas di database kami, bukan?
‫Dan itulah sebenarnya mengapa kami memilih
‫referensi orang tua sejak awal.
‫Namun, ada solusi bagus untuk ini.
‫Dan itu karena Mongoose sebenarnya menawarkan solusi yang sangat
‫bagus untuk masalah ini dengan
‫fitur yang cukup canggih yang disebut 'Virtual Populate. ' Jadi dengan 'Virtual
‫Populate', kami
‫sebenarnya dapat mengisi tur dengan ulasan.
‫Jadi, dengan kata
‫lain, kita bisa mendapatkan akses ke semua
‫ulasan untuk tur tertentu, tetapi tanpa menyimpan rangkaian ID ini di tur.
‫Jadi, anggap 'Virtual
‫Populate' sebagai cara untuk menyimpan rangkaian ID ulasan
‫itu dalam tur, tetapi tanpa benar-benar menyimpannya ke database.
‫Dan kemudian memecahkan masalah
‫yang kita miliki dengan referensi anak, bukan?
‫Jadi, ini seperti bidang virtual, tetapi dengan populasi, oke?
‫Jadi, untuk mengilustrasikannya,
‫mari kita lihat model tur kita di sini.
‫Jadi, apa yang baru saja saya
‫jelaskan adalah, secara teori, melakukan sesuatu seperti ini.
‫Jadi, pada model tur kami,
‫kami akan menambahkan bidang yang disebut 'Ulasan. '
‫(tombol mengklik) Dan kemudian atur
‫jenisnya ke Mongoose. Skema. ObyekId.
‫(tombol mengklik) Dan Anda tidak
‫perlu menulis ini.
‫Aku hanya melakukannya untuk menunjukkannya padamu.
‫(tombol mengklik) Dan kemudian
‫hubungkan dengan 'Tinjau. ' Dan tentu
‫saja, ini di sini harus menjadi objek.
‫Tapi, yang penting di sini adalah bahwa pada
‫dasarnya ini adalah bagaimana kita akan menerapkan referensi anak.
‫Jadi ulasan referensi tur, oke?
‫Tapi sekali lagi, kami tidak ingin melakukannya.
‫Jadi sebagai gantinya, kita akan menerapkan 'Virtual Populate. '
‫(tombol mengklik) Baiklah.
‫Dan itu bekerja seperti ini.
‫Jadi kami melakukannya di sini di skema tur.
‫(tombol mengklik) Dan kami
‫masih melakukannya. Maya.
‫Jadi seperti halnya dengan bidang virtual ini
‫di sini, durasi minggu, lalu kita ketikkan nama bidang virtualnya.
‫Jadi, sebut
‫saja 'Ulasan', lalu objek dari beberapa opsi.
‫Dan yang pertama adalah
‫nama model yang ingin kita referensikan.
‫Dan itu berfungsi seperti dengan referensi normal.
‫(tombol mengklik) Jadi
‫sekali lagi, nama model.
‫Jadi, 'Review' atau kursus, dalam hal ini.
‫Dan sekarang, kita sebenarnya perlu menentukan nama
‫bidang untuk menghubungkan dua kumpulan data.
‫Dan ini, bagi saya, adalah bagian paling rumit dari
‫penerapan 'Virtual Populate. ' Jadi,
‫mari pastikan Anda benar-benar memahami bagian ini.
‫Jadi di sini, kita perlu menentukan dua bidang.
‫Bidang asing dan bidang lokal.
‫Jadi mari kita mulai dengan bidang asing.
‫Jadi, ini adalah nama bidang di model lainnya.
‫Jadi dalam model Tinjauan
‫dalam hal ini, di mana referensi ke model saat ini disimpan.
‫Dan itu, dalam hal ini, bidang Tour, bukan?
‫Jadi, mari kita lihat itu.
‫Jadi, sekali lagi, dalam model ulasan kami, kami memiliki
‫bidang yang disebut 'Tur. '
‫Dan di sinilah ID tur disimpan.
‫Dan itulah mengapa di sini,
‫di bidang asing ini, kami menentukan
‫nama bidang itu untuk menghubungkan kedua model ini, oke?
‫Dan sekarang kita perlu melakukan hal yang sama untuk model saat ini.
‫Jadi, kita perlu mengatakan di mana ID itu sebenarnya
‫disimpan di sini dalam model Tur saat ini.
‫Jadi, bidang lokal.
‫Dan itu adalah, ID-nya.
‫Jadi, _ID, oke?
‫Jadi, sekali lagi, _ID ini, yang
‫disebut dalam model
‫lokal, disebut 'Tur' dalam model asing.
‫Jadi, dalam model Tinjauan. Oke?
‫Dan sekali lagi, inilah cara kami
‫menghubungkan kedua model ini bersama-sama.
‫Mari kita tulis di
‫sini bahwa ini adalah 'Virtual Populate', oke?
‫Jadi sekarang, dengan pengaturan ini, kita benar-benar
‫dapat menggunakan Populate seperti yang kita lakukan sebelumnya.
‫Jadi yang ingin kami lakukan
‫sekarang adalah melanjutkan dan
‫mengisi tur ketika kami hanya mendapatkan satu tur, oke?
‫Jadi di sini di Postman, dalam situasi 'Get Tour' ini. ' Oke?
‫Mari kita lihat ini benar-benar ada.
‫Dan memang begitu, tapi ini tur uji yang aneh.
‫Jadi, mari kita lakukan dengan 'Pendaki Hutan' ini.
‫Baiklah.
‫Jadi, ketika kami mendapatkan
‫tur ini, kami sekarang ingin mengisi ulasan.
‫Dan seharusnya sudah ada di sini sebagai array kosong.
‫Ini dia.
‫Ini bukan array kosong, tetapi disetel ke 'null. ' Tapi
‫lapangan virtual sebenarnya
‫sudah ada dengan ulasan.
‫Tapi itu nol pada
‫saat ini karena kami belum mengisinya, oke?
‫Dan sekali lagi, kami hanya ingin
‫mengisinya di
‫sini di 'Dapatkan Satu Tur', dan bukan di
‫'Dapatkan Semua Tur' karena itu akan
‫menjadi terlalu banyak informasi untuk dikirimkan ke klien saat mereka mendapatkan semua tur.
‫Juga, ketika kami mendapatkan semua
‫tur, itu biasanya untuk membuat halaman ikhtisar.
‫Dan dalam hal
‫ini, kami biasanya tidak memerlukan akses ke semua ulasan.
‫Kami hanya membutuhkan itu
‫ketika kami benar-benar menampilkan satu tur saja.
‫Oke? Jadi, saya pikir masuk
‫akal untuk hanya melakukan ini pada 'Get One Tour. ' Jadi,
‫mari kita lakukan itu mengisi
‫benar-benar tepat di controller.
‫Jadi, pengatur tur dan di bawah sini
‫ada 'Get Tour. ' Jadi,
‫itu sebenarnya sangat mudah.
‫Yang harus dilakukan hanyalah memanggil 'Populate'
‫setelah kueri lainnya, lalu cukup berikan nama bidang
‫yang ingin kita isi.
‫Jadi, seperti yang sudah kita ketahui, itu disebut 'Ulasan. ' Dan,
‫jadi seharusnya sudah begitu.
‫Baiklah?
‫Jadi, mari kita uji ini sekarang, dan lihat ini.
‫Dan memang, kami sekarang mendapatkan ulasan lengkap kami di sini.
‫Baiklah? Sehingga menjadi padat.
‫Dan itu berarti Virtual Populate
‫kami benar-benar berfungsi.
‫Sekarang, Anda mungkin
‫mulai melihat bahwa ini
‫menciptakan semacam masalah karena ini
‫pada dasarnya menciptakan rantai populasi.
‫Dan itu sama sekali tidak ideal.
‫Jadi, kami memiliki tur yang diisi dengan ulasan.
‫Tapi kemudian ulasan juga diisi
‫dengan tur lagi, dan juga dengan pengguna.
‫Dan kemudian juga tur ini
‫juga diisi dengan pemandu.
‫Yang dalam hal ini, tidak terjadi
‫karena tidak ada pemandu.
‫Tetapi jika ada, maka kita akan memiliki populasi lagi.
‫Jadi di sini kita akan memiliki rantai tiga populasi.
‫Dan untuk performa, itu tentu saja tidak ideal sama sekali.
‫Apalagi di sini dengan tur.
‫Jadi kami memiliki tur yang diisi dengan ulasan.
‫Dan dalam ulasan, kami kembali memiliki data tentang tur.
‫Dan itu tidak masuk akal sama sekali.
‫Jadi, agak kacau sekarang.
‫JADI, solusi yang akan saya
‫gunakan di sini
‫adalah mematikan pengisian ulasan dengan tur, oke?
‫Jadi pada dasarnya, kami tidak memerlukan data ini di setiap ulasan.
‫Jadi dalam hal ini, saya pikir itu solusi yang bagus.
‫Tetapi tentu saja, sekali lagi dalam kasus Anda, itu
‫akan selalu bergantung pada cara
‫kerja aplikasi Anda dalam kasus spesifik Anda.
‫Tapi di aplikasi ini, lebih logis untuk benar-benar
‫memiliki ulasan yang tersedia
‫di tur, dan tidak terlalu penting
‫memiliki tur yang tersedia di ulasan, oke?
‫Jadi, mari kita matikan populasi itu pada dasarnya,
‫dalam model Review.
‫Oke?
‫Jadi, mari kita komentari bagian ini,
‫salin di
‫sini, dan pada dasarnya singkirkan yang pertama ini.
‫Sekarang baik-baik saja?
‫Bersiaplah untuk menyimpan.
‫Mari kita coba lagi.
‫Jadi, sekarang kita hanya akan melihat ID tur di sini.
‫Oke? Dan memang, itulah yang kami dapatkan.
‫Oke? Nah dengan
‫ini tentunya kita masih melakukan parent reference ya?
‫Kami masih menyimpan referensi untuk tur di
‫sini, tetapi kami tidak mengisinya.
‫Dan lagi, karena kita tidak
‫selalu membutuhkan data itu di sini.
‫Baiklah. Mari kita cepat rekap apa yang kita lakukan di sini.
‫Jadi, kami mulai melakukan hanya referensi orang tua pada ulasan.
‫Tapi itu membuatnya sehingga dalam
‫tur, kami tidak memiliki akses ke ulasan yang sesuai.
‫Dan perbaikan termudah untuk itu
‫adalah juga melakukan referensi anak di tur.
‫Tetapi masalahnya
‫adalah bahwa kita sebenarnya tidak
‫ingin menyimpan larik semua
‫dokumen anak di dokumen induk, bukan?
‫Karena sekali lagi,
‫kami tidak ingin membiarkan array tumbuh tanpa batas.
‫Jadi alih-alih
‫melakukan itu, kami menerapkan populasi virtual seperti ini.
‫Baiklah? Jadi, seperti ini.
‫Dan ini pada dasarnya memungkinkan kita untuk melakukan hal yang sama persis.
‫Jadi, menyimpan referensi ke semua dokumen
‫anak di
‫dokumen induk, tetapi tanpa benar-benar menyimpan
‫informasi itu ke database.
‫Jadi, setelah populate virtual ini
‫diatur, yang perlu kita lakukan pada dasarnya
‫adalah menggunakan Populate seperti yang kita lakukan sebelumnya dengan referensi sebenarnya.
‫Dan kemudian, akhirnya, kami
‫juga mematikan salah satu populasi yang kami miliki di ulasan.
‫Jadi, ini di sini,
‫tempat kami mengisi ID tur, karena
‫itu menciptakan rantai populasi yang tidak efisien.
‫Dan itu, tentu saja, sesuatu yang tidak kita inginkan.
‫Jadi, pada
‫akhirnya, kita berakhir dengan hasil seperti ini, oke?
‫Besar.
‫Jadi, saya harap itu masuk akal bagi Anda.
‫Jadi dengan ini,
‫kita benar-benar menyelesaikan untuk saat ini bagian dari populasi ini, oke?
‫Jadi sekarang mari kita beralih ke
‫topik berikutnya, yang pada dasarnya adalah membuat rute bersarang.