Com implementar les funcions geoespacials de MongoDB

Com Implementar Les Funcions Geoespacials De Mongodb



La característica geoespacial de MongoDB proporciona una manera senzilla d'emmagatzemar les dades geogràfiques en una base de dades. Essencialment, podem emmagatzemar les dades geoespacials a MongoDB com a objectes GeoJSON. GeoJSON és un format gratuït i de codi obert que depèn de la notació d'objectes JavaScript amb dades geogràfiques senzilles. Aquesta funcionalitat és important per a les aplicacions que requereixen serveis basats en la ubicació, com ara el procés de mapeig, basat en la cerca d'ubicació i altres. Aquest article cobreix la característica geoespacial amb l'exemple d'implementació.

Afegir documents a la col·lecció per a característiques geoespacials

Per demostrar la funcionalitat de la funció geoespacial de MongoDB, necessitem els documents per a la col·lecció específica. Inserim uns quants documents a la col·lecció 'àrea' tal com es mostra a continuació:

db.area.insertMany( [
{
nom: 'Parc infantil' ,
ubicació: { tipus: 'punt' , coordenades: [- 60.97 , 30.77 ] },
categoria: 'Jardí'
},
{
nom: 'Àrea d'estudiants' ,
ubicació: { tipus: 'punt' , coordenades: [- 60.9928 , 30.7193 ] },
categoria: 'Jardí'
},
{
nom: 'Campo de futbol' ,
ubicació: { tipus: 'punt' , coordenades: [- 60.9375 , 30.8303 ] },
categoria: 'Estadi'
}
] )

Tenim documents que contenen les dades d'ubicació com les coordenades. A més, creem un índex geoespacial al camp per optimitzar el rendiment de les consultes geoespacials.









Exemple 1: ús de l'operador de consulta $geoIntersects

Primer, tenim l'operador $geoIntersects de la característica geoespacial que es talla amb l'objecte proporcionat. Considereu la següent implementació de l'operador $geoIntersects:



db.area.find({ ubicació: { $geoIntersects: { $geometry: { tipus: 'punt' ,

coordenades: [- 60.97 , 30.77 ] } } } })

A l'exemple, anomenem la col·lecció 'àrea' juntament amb l'operació 'trobar'. Al mètode find(), passem els conjunts de camps 'ubicació' a l'operador de consulta $geoIntersects de la característica geoespacial. S'utilitza per comprovar si el punt especificat es talla amb la geometria emmagatzemada al camp de geometria.





Llavors, l'operador $geoIntesects pren l'operador $geometry on el camp de tipus s'estableix amb el valor 'Punt' i el camp de coordenades es dóna amb els valors de 'coordenades'. Aquí, la $geometry es defineix per a la comparació geoespacial.

La sortida següent és on es recupera el document esperat i on el camp de geometria conté un objecte geomètric que es talla amb el punt especificat:



Exemple 2: Ús de l'operador de consulta $near

L'operador $near també és la característica geoespacial que s'utilitza per fer les consultes geoespacials per identificar els documents que estan geogràficament a prop d'un lloc determinat. Recupera els documents que es disposen segons la seva proximitat a la ubicació especificada. Aquí, proporcionem la implementació de l'operador $near:

db.area.find(
{
ubicació:
{ $a prop:
{
$geometry: { tipus: 'punt' ,  coordenades: [ - 60.9667 , 30.78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

A l'exemple, definim el camp 'ubicació' de la col·lecció 'àrea' dins de l'operació 'trobar'. A continuació, establim l'operador de consulta $near de la característica geoespacial en aquest camp 'ubicació'. L'operador $near cerca el punt proper amb el punt de coordenades donat. A continuació, utilitzem els paràmetres $minDistance i $maxDistance a l'operador $near que es proporcionen amb certs valors per recuperar els documents dins de l'interval de distància especificat des del punt donat.

El document es recupera a la sortida que es troba a prop de les ubicacions o punts d'interès especificats en una col·lecció d''àrea' geoespacial:

Exemple 3: Ús de l'operador de consulta $nearsphere

Alternativament, tenim l'operador $nearsphere que és similar a l'operador $near, però $nearSphere té en compte la forma esfèrica de la Terra en calcular les distàncies.

db.area.find(
{
ubicació: {
$nearSphere: {
$geometry: {
tipus: 'punt' ,
coordenades: [- 60.9667 , 30.78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

A l'exemple, utilitzem l'operador $nearsphere de la consulta geoespacial. L'operador $nearspehere cerca aquí el document els punts més propers del qual estan a prop dels punts especificats a la consulta i els punts s'estableixen a la matriu de camps de coordenades.

Després d'això, afinem els resultats establint els paràmetres $minDistance i $maxDistance. El paràmetre $minDistance assegura que els documents retornats estiguin almenys a 1000 metres de distància del punt especificat, mentre que el paràmetre $maxDistance limita els resultats a les ubicacions que no es troben a més de 5000 metres de distància.

El document es mostra a la sortida amb una ubicació dins d'un metre especificat des del punt amb coordenades donades:

Exemple 4: Ús de l'operador de consulta $geoWithin

A continuació, tenim l'operador $geoWithin a MongoDB que s'utilitza per a consultes geoespacials per trobar els documents que es troben completament dins d'una forma especificada, com ara un cercle. Fem la següent demostració de la consulta $geoWithin:

db.area.find({ ubicació:

{ $geoDins:

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

A l'exemple, utilitzem l'operador $geoWithin per trobar els documents de la col·lecció 'àrea' dins d'una àrea circular determinada en una esfera 2D. Per a això, especifiquem l'operador $centerSphere dins de l'operador $geoWithin que pren els dos arguments com a punt cèntric, que probablement representa el punt de coordenades aquí, i el radi del cercle que representa el valor de la distància en milles.

El document resultant es recupera a continuació, que representa un punt geoespacial que es troba dins del cercle que està definit pel punt central donat i el radi d'aproximadament 3 milles:

Exemple 5: Ús de l'operador de consulta $geoNear

A més, l'operador $geoNear també és un operador geoespacial que s'utilitza per a la canalització d'agregació. Realitza una consulta geoespacial i retorna els documents que estan ordenats per la seva proximitat a un punt determinat. Aquí, hem donat l'operador $geoNear que s'anomena dins de la canalització d'agregació.

db.area.aggregate([
{
$geoNear: {
prop de: { tipus: 'punt' , coordenades: [- 60.99279 , 30.719296 ] },
distanceField: 'dist.calculat' ,
MaxDistance: 2 ,
consulta: { categoria: 'Jardí' },
includeLocs: 'dist.location' ,
esfèric: cert
}
}
])

A l'exemple, anomenem el mètode agregat de MongoDB i definim l'operador $geoNear al seu interior. L'operador $geoNear s'estableix amb diversos paràmetres per especificar el comportament de la consulta. Primer, establim el paràmetre 'a prop' que proporciona els valors de 'coordenades' com a punt de referència per cercar.

A continuació, utilitzem el paràmetre 'distanceField' per especificar el camp proporcionat com a camp de resultat. Aquest camp de resultat establert emmagatzema la distància entre cada document i el punt de referència. A continuació, definim el paràmetre 'maxDistance' amb el valor de '2' que representa la distància màxima en metres.

Després d'això, tenim el paràmetre 'consulta' que filtra els documents pel camp 'categoria' i només considera els documents on la 'categoria' és 'Parcs'. Aleshores anomenem el paràmetre 'includeLocs' per contenir la informació de la ubicació. Finalment especifiquem el paràmetre 'esfèric' amb el valor 'vertader' que calcula les distàncies mitjançant un sistema de coordenades esfèriques 2D.

La canalització d'agregació representa el document a la sortida que mostra la informació amb el paràmetre en conseqüència. El següent camp 'dist.calculated' mostra la distància de cada document des del punt de referència:

Conclusió

Vam saber que les capacitats geoespacials de MongoDB ens ajuden a gestionar i consultar de manera eficient la informació basada en la ubicació. Hem après la implementació de la característica geoespacial utilitzant els seus diferents operadors amb el programa d'exemple. Tenim moltes més funcionalitats i mètodes que també són beneficiosos per a una àmplia gamma d'aplicacions.