Kā ieviest MongoDB ģeotelpiskās funkcijas

Ka Ieviest Mongodb Geotelpiskas Funkcijas



MongoDB ģeotelpiskā funkcija nodrošina vienkāršu veidu, kā datu bāzē uzglabāt ģeogrāfiskos datus. Būtībā mēs varam saglabāt ģeotelpiskos datus MongoDB kā GeoJSON objektus. GeoJSON ir bezmaksas un atvērtā pirmkoda formāts, kas ir atkarīgs no JavaScript objektu apzīmējuma ar vienkāršiem ģeogrāfiskiem datiem. Šī funkcionalitāte ir svarīga lietotnēm, kurām nepieciešami pakalpojumi, kuru pamatā ir atrašanās vieta, piemēram, kartēšanas process, atrašanās vietas meklēšana un citi. Šajā rakstā ir apskatīts ģeotelpiskais līdzeklis ar īstenošanas piemēru.

Dokumentu pievienošana ģeotelpisko objektu kolekcijai

Lai demonstrētu MongoDB ģeotelpiskās funkcijas funkcionalitāti, mums ir nepieciešami dokumenti konkrētajai kolekcijai. Mēs ievietojam dažus dokumentus “apgabala” kolekcijā, kā parādīts tālāk.

db.area.insertMany( [
{
nosaukums: 'Bērnu parks' ,
atrašanās vieta: { tips: 'Punkts' , koordinātas: [ - 60.97 , 30.77 ] },
kategorija: 'Dārzs'
},
{
nosaukums: 'Studentu zona' ,
atrašanās vieta: { tips: 'Punkts' , koordinātas: [ - 60,9928 , 30,7193 ] },
kategorija: 'Dārzs'
},
{
nosaukums: 'Futbola laukums' ,
atrašanās vieta: { tips: 'Punkts' , koordinātas: [ - 60,9375 , 30.8303 ] },
kategorija: 'Stadions'
}
] )

Mums ir dokumenti, kas satur atrašanās vietas datus, piemēram, koordinātas. Turklāt mēs laukā izveidojam ģeotelpisko indeksu, lai optimizētu ģeotelpisko vaicājumu veiktspēju.









1. piemērs: $geoIntersects vaicājuma operatora izmantošana

Pirmkārt, mums ir ģeotelpiskā objekta operators $geoIntersects, kas krustojas ar norādīto objektu. Apsveriet šādu operatora $geoIntersects ieviešanu:



db.area.find({ atrašanās vieta: { $geoIntersects: { $geometry: { type: 'Punkts' ,

koordinātas: [ - 60.97 , 30.77 ] } } } })

Piemērā mēs saucam kolekciju “apgabals” kopā ar darbību “atrast”. Metodei find() mēs nododam “atrašanās vietas” lauku kopas ģeotelpiskā objekta $geoIntersects vaicājuma operatoram. To izmanto, lai pārbaudītu, vai norādītais punkts krustojas ar ģeometriju, kas saglabāta ģeometrijas laukā.





Pēc tam operators $geoIntesects izmanto operatoru $geometry, kur tipa lauks ir iestatīts ar 'Point' vērtību un koordinātu lauks tiek norādīts ar 'koordinātu' vērtībām. Šeit ģeotelpiskajam salīdzinājumam ir definēta $geometry.

Šī izvade ir vieta, kur tiek izgūts paredzamais dokuments un kur ģeometrijas laukā ir ģeometrisks objekts, kas krustojas ar norādīto punktu:



2. piemērs: $near vaicājuma operatora izmantošana

Operators $near ir arī ģeotelpiskais līdzeklis, kas tiek izmantots, lai veiktu ģeotelpiskos vaicājumus, lai identificētu dokumentus, kas atrodas ģeogrāfiski tuvu noteiktai vietai. Tas izgūst dokumentus, kas ir sakārtoti atbilstoši to tuvumam norādītajai vietai. Šeit mēs piedāvājam operatora $near ieviešanu:

db.area.find(
{
atrašanās vieta:
{ $netālu :
{
$ģeometrija: { tips: 'Punkts' , koordinātas: [ - 60,9667 , 30.78 ] },
$minDistance: 1000 ,
$maksimālais attālums: 5000
}
}
}
)

Piemērā mēs definējam kolekcijas 'apgabals' lauku 'atrašanās vieta' operācijā 'atrast'. Pēc tam mēs iestatām ģeotelpiskā objekta $near vaicājuma operatoru šim laukam “atrašanās vieta”. Operators $near meklē tuvāko punktu ar doto koordinātu punktu. Tālāk mēs izmantojam $minDistance un $maxDistance parametrus operatorā $near, kas tiek nodrošināti ar noteiktām vērtībām, lai izgūtu dokumentus noteiktā attāluma diapazonā no dotā punkta.

Dokuments tiek izgūts izvadā, kas atrodas netālu no norādītajām vietām vai apskates vietām ģeotelpiskā “apgabala” kolekcijā:

3. piemērs: $nearsphere vaicājuma operatora izmantošana

Alternatīvi, mums ir operators $nearsphere, kas ir līdzīgs operatoram $nearSphere, taču, aprēķinot attālumus, $nearSphere ņem vērā Zemes sfērisko formu.

db.area.find(
{
atrašanās vieta: {
$nearSphere: {
$ģeometrija: {
tips: 'Punkts' ,
koordinātas: [- 60,9667 , 30.78 ]
},
$minDistance: 1000 ,
$maksimālais attālums: 5000
}
}
}
)

Piemērā mēs izmantojam ģeotelpiskā vaicājuma operatoru $nearsphere. Operators $nearspehere šeit meklē dokumentu, kura tuvākie punkti atrodas tuvu vaicājumā norādītajiem punktiem, un punkti tiek iestatīti koordinātu lauka masīvā.

Pēc tam mēs precizējam rezultātus, izveidojot parametrus $minDistance un $maxDistance. Parametrs $minDistance nodrošina, ka atgrieztie dokumenti atrodas vismaz 1000 metru attālumā no norādītā punkta, savukārt parametrs $maxDistance ierobežo rezultātus līdz vietām, kas atrodas ne tālāk kā 5000 metru attālumā.

Dokuments tiek parādīts izvadā ar atrašanās vietu noteiktā metra rādiusā no punkta ar norādītajām koordinātām:

4. piemērs: $geoWithin vaicājuma operatora izmantošana

Pēc tam MongoDB ir operators $geoWithin, ko izmanto ģeotelpiskajiem vaicājumiem, lai atrastu dokumentus, kas pilnībā atrodas noteiktā formā, piemēram, aplī. Apskatīsim šādu vaicājuma $geoWithin demonstrāciju:

db.area.find({ atrašanās vieta:

{ $geoWithin:

{ $centerSphere: [ [ - 60.93414657 , 30.82302903 ], 3 / 3963,2 ] } } })

Piemērā mēs izmantojam operatoru $geoWithin, lai atrastu kolekcijas “apgabals” dokumentus noteiktā apļveida apgabalā 2D sfērā. Šim nolūkam operatorā $geoWithin mēs norādām operatoru $centerSphere, kas abus argumentus izmanto kā centrālo punktu, kas šeit, iespējams, apzīmē koordinātu punktu, un apļa rādiusu, kas apzīmē attāluma vērtību jūdzēs.

Iegūtais dokuments tiek izgūts šādā veidā, kas attēlo ģeotelpisko punktu, kas atrodas aplī, ko nosaka dotais centra punkts un aptuveni 3 jūdžu rādiuss:

5. piemērs: $geoNear vaicājuma operatora izmantošana

Turklāt operators $geoNear ir arī ģeotelpiskais operators, ko izmanto apkopošanas cauruļvadam. Tas veic ģeotelpisku vaicājumu un atgriež dokumentus, kas ir sakārtoti pēc to tuvuma noteiktam punktam. Šeit mēs esam norādījuši operatoru $geoNear, kas tiek izsaukts apkopošanas konveijerā.

db.area.aggregate([
{
$geoNear: {
tuvumā: { tips: 'Punkts' , koordinātas: [ - 60,99279 , 30.719296 ] },
distanceField: 'dist.calculated' ,
maxDistance: 2 ,
vaicājums: { kategorija: 'Dārzs' },
includeLocs: 'dist.location' ,
sfērisks: patiess
}
}
])

Piemērā mēs izsaucam MongoDB apkopošanas metodi un tajā definējam operatoru $geoNear. Operators $geoNear ir iestatīts ar vairākiem parametriem, lai norādītu vaicājuma darbību. Pirmkārt, mēs iestatām parametru “tuvu”, kas nodrošina “koordinātu” vērtības kā atskaites punktu meklēšanai.

Pēc tam mēs izmantojam parametru “distanceField”, lai norādītu norādīto lauku kā iznākuma lauku. Šajā iestatītā rezultāta laukā tiek saglabāts attālums starp katru dokumentu un atskaites punktu. Tālāk mēs definējam parametru “maxDistance” ar vērtību “2”, kas apzīmē maksimālo attālumu metros.

Pēc tam mums ir parametrs “query”, kas filtrē dokumentus pēc lauka “kategorija” un ņem vērā tikai tos dokumentus, kuru “kategorija” ir “Parki”. Pēc tam mēs izsaucam parametru “includeLocs”, lai ietvertu atrašanās vietas informāciju. Visbeidzot, mēs norādām “sfērisko” parametru ar “patieso” vērtību, kas aprēķina attālumus, izmantojot 2D sfērisku koordinātu sistēmu.

Apkopošanas konveijers attēlo dokumentu izvadē, kas attiecīgi parāda informāciju par parametru. Nākamajā laukā “dist.calculated” tiek parādīts katra dokumenta attālums no atskaites punkta:

Secinājums

Mēs uzzinājām, ka MongoDB ģeotelpiskās iespējas palīdz mums efektīvi apstrādāt un vaicāt uz atrašanās vietu balstītu informāciju. Mēs apguvām ģeotelpiskās funkcijas ieviešanu, izmantojot dažādus tā operatorus ar piemēru programmu. Mums ir daudz vairāk funkciju un metožu, kas arī ir noderīgas plašam lietojumu klāstam.