‫Selamat datang kembali setelah kuliah panjang
‫di mana kami mencari dokumen
‫tur dalam
‫jarak tertentu dari titik tertentu menggunakan kueri geospasial.
‫Sekarang dalam kuliah ini, mari kita gunakan agregasi geospasial
‫untuk menghitung jarak
‫ke semua tur dari titik tertentu.
‫Jadi seperti sebelumnya, mari kita mulai dengan
‫mendefinisikan rute sehingga kita tahu data
‫mana yang akan kita kerjakan.
‫Jadi router. rute; kali ini saya akan
‫menyebutnya jarak saja, dan kemudian data yang kita butuhkan adalah
‫garis lintang dan garis bujur
‫dari titik di mana
‫pengguna saat ini berada,
‫jadi dalam contoh kita sebelumnya yaitu LA,
‫dan kemudian
‫izinkan juga pengguna lagi untuk menentukan unit.
‫Lalu di sini, fungsi pengendali rute.
‫Sekarang
‫kali ini di sini, kita tidak memerlukan parameter
‫jarak, seperti yang kita
‫miliki di sini, karena kita tidak akan mencari radius tertentu.
‫Kami benar-benar akan menghitung jarak dari
‫titik tertentu ke semua tur yang kami
‫miliki dalam koleksi kami.
‫Jadi pawangnya ada di tourController, dan
‫itu akan disebut getDistances.
‫Kami belum memilikinya, jadi mari kita buat.
‫CatchAsync, dan tentu saja tandai fungsinya sebagai async juga
‫karena kita sudah tahu bahwa kita
‫akan menggunakan pipa agregasi,
‫dan pada saat itu kita
‫akan menggunakan wait.
‫Awal dari fungsi ini sebenarnya sangat mirip dengan
‫fungsi getToursWithin, jadi mari kita salin
‫semua kode ini.
‫Kami memiliki beberapa unit yang serupa, maka kami juga perlu mendapatkan
‫garis lintang dan garis bujur,
‫dan kami juga perlu membuat kesalahan ini
‫jika tidak ada garis lintang atau tidak ada garis bujur.
‫Yang ini di sini tidak
‫berlaku, dan juga kami tidak memiliki jarak.
‫Jadi sekarang mari kita lakukan perhitungan yang sebenarnya.
‫Sama seperti sebelumnya untuk melakukan
‫perhitungan kami selalu menggunakan pipa agregasi.
‫Dan ingat, itu disebut pada model itu sendiri.
‫Jadi Tur. agregat.
‫Kemudian mari kita tunggu itu, dan simpan
‫ke dalam variabel distances.
‫Jadi di sini, ingat, kita melewati
‫sebuah array dengan semua tahapan pipa agregasi
‫yang ingin kita definisikan.
‫Sekarang untuk agregasi geospasial,
‫sebenarnya hanya ada satu tahap, dan itu
‫disebut geoNear, jadi yang ini.
‫Sekali lagi, ini adalah
‫satu-satunya tahap pipa agregasi geospasial yang benar-benar ada.
‫Yang ini selalu harus menjadi yang pertama di jalur pipa.
‫Jadi ingatlah bahwa geoNear
‫selalu harus menjadi tahap pertama.
‫Hal lain yang juga sangat penting untuk diperhatikan
‫tentang geoNear adalah bahwa hal itu
‫mengharuskan setidaknya salah satu
‫bidang kami berisi indeks geospasial.
‫Sebenarnya kita sudah melakukan itu
‫sebelumnya, jadi mari kita lihat lagi.
‫Lokasi awal kami
‫sudah memiliki indeks geospasial 2dsphere ini.
‫Karena kita menggunakan startLocation
‫ini untuk menghitung
‫jarak, maka itu sempurna.
‫Jika hanya ada satu bidang dengan
‫indeks geospasial maka tahap geoNear ini di sini akan
‫secara otomatis menggunakan indeks tersebut untuk melakukan perhitungan.
‫Tetapi jika Anda memiliki beberapa bidang dengan indeks geospasial
‫maka Anda perlu menggunakan parameter kunci
‫untuk menentukan bidang
‫yang ingin Anda gunakan untuk perhitungan.
‫Jadi ingatlah itu, tetapi
‫sekali lagi, dalam kasus ini
‫kita hanya memiliki satu bidang, dan secara otomatis
‫bidang startLocation akan digunakan untuk melakukan perhitungan ini.
‫Jadi, apa yang kita perlukan untuk masuk ke geoNear?
‫Nah, pertama-tama kita perlu menentukan properti
‫dekat, dan dekat adalah titik untuk menghitung jarak.
‫Jadi semua jarak akan dihitung dari titik yang
‫kita tentukan di sini, dan kemudian semua lokasi awal.
‫Jadi titik dekat ini tentu saja titik
‫yang kita lewati ke fungsi ini dengan garis
‫lintang dan garis bujur ini.
‫Sekarang kita perlu menentukan titik ini di sini sebagai geojson,
‫jadi seperti yang kita
‫lakukan sebelumnya, di mana kita perlu menentukan
‫tipenya sebagai Point, dan kemudian menentukan properti koordinat.
‫Dan seperti biasa koordinat pertama di sini adalah
‫bujur, dan kemudian yang kedua, lintang.
‫Dan mari kita kalikan keduanya dengan satu,
‫cukup untuk mengubahnya menjadi angka.
‫Jadi ini adalah bidang wajib pertama, dekat, dan
‫yang kedua adalah properti bidang jarak.
‫Jadi, distanceField, dan ini adalah nama bidang
‫yang akan dibuat dan
‫di mana semua jarak yang dihitung akan disimpan.
‫Jadi mari kita sebut ini satu jarak.
‫Sebenarnya, itu saja.
‫Itu semua bidang yang
‫wajib di tahap geoNear ini.
‫Dan tentu saja, kita dapat menambahkan tahapan lain
‫di sini, dan kita sebenarnya akan melakukannya
‫nanti, tapi untuk saat ini
‫yang ingin saya lakukan adalah benar-benar melihat hasil kerja ini.
‫Mari kita salin lagi hasilnya di sini, sehingga mengirimkan
‫hasil ini, dan di sini, mari kita kirim jaraknya, dan
‫juga yang ini tidak
‫kita perlukan.
‫Jadi, kami siap untuk memulai.
‫Ingatlah bahwa saat ini kami tidak menggunakan unit, tetapi
‫jangan khawatir tentang itu.
‫Kita akan melakukannya sebentar lagi, tapi
‫sekali lagi, pertama saya benar-benar ingin melihat ini bekerja.
‫Ingat bahwa rutenya sekarang jauh, jadi mari
‫kita salin yang ini di sini.
‫Sebenarnya akan saya simpan juga,
‫jadi ke dalam wisata.
‫Katakanlah dapatkan tur dalam radius.
‫Ini di sini disebut jarak, dan kita tidak
‫memiliki ini dan juga bukan ini.
‫Jadi hanya koordinat, dan sekali lagi unitnya.
‫Mari kita lihat, dan sekarang kita akan mendapatkan kesalahan ini.
‫Ingat bagaimana kami mengatakan bahwa
‫geoNear selalu perlu menjadi tahap pertama dalam sebuah pipeline,
‫tetapi jika Anda sekarang
‫melihat kodenya, Anda mungkin berpikir bahwa sebenarnya tahapan geoNear kami saat
‫ini adalah tahap pertama dari pipeline kami.
‫Karena di sini, memang terlihat seperti itu, kan?
‫Tidak ada apa-apa sebelum ini, jadi mengapa kita
‫mendapatkan kesalahan ini bahwa geoNear bukan tahap pertama dalam pipeline?
‫Sebenarnya saya butuh sedikit waktu untuk mengetahuinya karena ini
‫ada hubungannya dengan sepotong kode yang
‫kami tulis sejak lama.
‫Itu di sini dalam model tur,
‫dan jika kita turun ke sini, saya pikir.
‫Di sini, kami memiliki middleware agregasi ini, dan ingat
‫bahwa apa yang dilakukannya adalah untuk selalu menambahkan tahap pertandingan ini
‫di sini sebelum semua tahap lainnya, dan sebenarnya kami memiliki
‫konsol ini. log di
‫sini dan memang Anda benar-benar dapat melihat
‫seluruh jalur pipa di sini.
‫Jadi Anda lihat bahwa pertama-tama kita
‫memiliki kecocokan, dan kemudian fase
‫geoNear di sini, sebenarnya hanya sebagai tahap kedua.
‫Jadi sebenarnya masuk akal jika kita mendapatkan kesalahan itu.
‫Sekarang kita dapat melanjutkan dan mengubah middleware
‫ini di sini dan mengatakan bahwa jika geoNear adalah
‫operator pertama dalam pipeline, maka jangan lakukan ini di sini.
‫Tapi itu terlalu banyak pekerjaan untuk kasus penggunaan ini, jadi
‫yang akan saya lakukan adalah menyingkirkan middleware ini.
‫Jadi, simpan ini, dan sekarang mari kita coba lagi.
‫Sekarang kita mendapatkan tur kita, dan sekarang
‫harus memiliki bidang jarak itu.
‫Jadi mari kita cari itu, dan memang ini dia.
‫Jadi jarak, dan kemudian jumlah besar ini di sini.
‫Ini adalah angka
‫yang besar, karena sebenarnya ini dihitung
‫dalam meter, jadi hasilnya dalam meter,
‫jadi pertama-tama kita ubah yang ini ke kilometer.
‫Nanti kita juga akan mengubahnya menjadi mil,
‫karena ingat kita menentukan satuannya ke mil, tetapi
‫untuk saat ini solusi
‫termudah adalah mengubahnya menjadi kilometer,
‫karena yang
‫harus kita lakukan adalah membaginya dengan 1000.
‫Dan kemudian yang
‫ingin saya lakukan adalah hanya benar-benar mengetahui
‫jarak, dan nama turnya.
‫Jadi singkirkan semua kekacauan lain yang kita miliki di sini
‫dan benar-benar hanya fokus pada jarak itu sendiri.
‫Untuk itu, seperti yang mungkin
‫Anda ingat, kita dapat menggunakan tahap proyek.
‫Jadi mari kita tambahkan di sini sebagai tahap kedua.
‫Jadi proyek, dan kemudian pada dasarnya nama bidang yang
‫ingin kita pertahankan.
‫Jadi itu jaraknya, jadi kita atur itu satu lawan satu,
‫mengatakan bahwa kita ingin mempertahankannya, dan kemudian juga namanya
‫sehingga kita benar-benar tahu tur apa yang sedang kita bicarakan.
‫Dengan itu kita singkirkan semua data
‫lainnya, dan sekarang pada dasarnya kita membagi jarak dengan
‫1000 untuk mengubah meter ini menjadi kilometer.
‫Sebenarnya sangat mudah
‫untuk melakukannya, karena dalam tahap geoNear sebenarnya
‫kita bisa menentukan properti distance multiplier.
‫Jadi distanceMultiplier, dan di sini kita dapat menentukan angka yang
‫kemudian akan dikalikan dengan semua jarak.
‫Di sini kita tentukan 0. 001, dan itu sama persis dengan
‫membagi dengan 1000.
‫Jadi mari kita uji hasil kita di sini sekarang.
‫Dan perhitungan itu tampaknya membutuhkan waktu, tetapi
‫sekarang kita mulai.
‫Jadi sekarang Anda mendapatkan hasil yang bagus di sini dalam kilometer.
‫Seperti yang Anda lihat Sports Lover adalah tur terdekat dengan
‫lokasi di Los Angeles yang kami tandai.
‫Jadi jaraknya hanya 64 kilometer, yang
‫seharusnya sekitar 40 mil.
‫Tapi sekali lagi, kita akan melakukan konversi itu dalam satu detik.
‫Untuk saat ini, saya hanya ingin kembali ke peta dan kompas
‫itu dan melihat apakah ini benar-benar masuk akal.
‫Jadi kami masih di sini, dan kami masih
‫memiliki peta lokasi awal kami.
‫Sekarang masalahnya
‫di sini adalah bahwa kita sebenarnya tidak dapat mengklik salah
‫satu dari titik-titik ini dan melihat apa itu.
‫Tapi mari kita menggambar lingkaran cepat di sini lagi hanya
‫untuk melihat mana yang merupakan tur terdekat,
‫dan apakah mereka cocok dengan yang ada di output kita.
‫Jadi itu seperti di sini, saya
‫percaya, jadi mari kita sertakan lima tur ini di sini.
‫Jadi nama mereka adalah The Park Camper, Snow Adventurer, Wine
‫Taster, Sports Lover, dan Star Gazer, dan sekarang
‫ketika kita datang ke sini,
‫mereka sebenarnya adalah lima yang pertama.
‫Pencinta Olahraga, Park Camper,
‫Wine Taster, Star Gazer dan Snow Adventurer.
‫Jadi yang paling dekat adalah Sports Lover,
‫dan selanjutnya Park Camper
‫dan Wine Taster.
‫Yang ini di sini akan menjadi Park
‫Camper, yang saya yakini dimulai di
‫Las Vegas, jadi
‫masuk akal, dan kemudian yang ketiga
‫ada di sini, The Wine Taster dekat San Francisco.
‫Jadi jarak 800 kilometer itu menurut saya, atau
‫apa itu?
‫Ya, 600 kilometer, itu masuk akal.
‫Jadi, sesuatu yang dekat dengan 400 mil di sini.
‫Dan berbicara tentang mil, mari kita lakukan
‫konversi itu sekarang juga.
‫Mari kita lakukan sesuatu yang mirip dengan apa yang kita
‫lakukan sebelumnya, jadi uji unitnya.
‫Mari kita buat variabel
‫multiplier, lagi-lagi operator ternary di sini,
‫jadi jika mil maka apa yang harus menjadi multiplier kita?
‫Nah, mari kita cari
‫di Google apa itu satu meter dalam mil.
‫Satu meter ke mil, dan Google biasanya
‫memberi kami respons yang cukup bagus, dan memang begitu.
‫Jadi jika ini adalah satu meter, maka yang perlu kita
‫lakukan adalah mengalikan hasil kita dalam meter dengan
‫angka ini.
‫Jadi mari kita salin di sini, dan kembali,
‫dan ini harus menjadi
‫pengali kita jika unitnya meter, atau sebenarnya dalam kasus mil.
‫Dan jika itu meter,
‫maka itu 0. 001 yang kami gunakan sebelumnya.
‫Kami tidak menginginkannya dalam
‫meter, karena itu bukan unit yang benar-benar dapat dibaca.
‫Sebaliknya kami menginginkannya dalam kilometer.
‫Jadi sekarang kita dapat melanjutkan dan menggunakan variabel pengali
‫di sini, simpan, dan mari kita coba.
‫Jadi lihat apa yang kita dapatkan di
‫sini dalam kilometer, jadi dari hasil sebelumnya, yaitu 64.
‫Itu kira-kira 40 mil, jadi mari kita kirim itu, dan
‫itu cukup dekat.
‫Jadi 40. 2 mil memang.
‫Dan itulah tur terdekat
‫kami, dan yang terjauh adalah City Wonderer, yang menurut saya dimulai di
‫New York atau semacamnya, dan itu lebih
‫dari 2400 mil jauhnya dari L. A.
‫Jika kemudian kita set di sini ke kilometer,
‫maka seharusnya kembali mendapatkan nilai yang kita
‫miliki sebelumnya.
‫Mari kita kembalikan ke mil
‫karena saya tahu bahwa kebanyakan orang yang menonton kursus ini
‫berasal dari Amerika Serikat. S. , dan di
‫sana mereka menggunakan mil, bukan kilometer.
‫Jadi mari simpan ini di sini
‫juga untuk koleksi kami mendapatkan jarak ke tur dari titik.
‫Jadi itu saja, yang mengakhiri kuliah ini,
‫dan itu saja yang saya tunjukkan kepada Anda tentang data geospasial.
‫Jadi video ini dan yang terakhir seharusnya
‫memberi Anda gambaran yang sangat bagus
‫tentang cara bekerja dengan data geospasial di MongoDB.
‫Dan seperti yang saya katakan sebelumnya, ada banyak sekali
‫kemungkinan yang dapat Anda lakukan dalam aplikasi Anda sendiri
‫dengan menggunakan jenis data ini.