Utilizza le query geospaziali nelle operazioni compatibili con MongoDB per eseguire query sui documenti che si trovano in un determinato intervallo da una longitudine e una latitudine specifiche.
Prima di iniziare
Assicurati di avere accesso a un database operativo compatibile con MongoDB esistente oppure crea un database e connettiti a esso.
Assicurati di avere almeno un indice 2dsphere o creane uno.
Oggetti GeoJSON
Per eseguire una query geospaziale sui campi della raccolta, i campi su cui esegui la query devono essere oggetti GeoJSON o GeoPoint.
Eseguire una query geospaziale
Puoi eseguire una query geospaziale utilizzando l'operatore $near, che calcola
la distanza di un punto geografico rispetto ai punti geografici all'interno
dei documenti. Questi documenti vengono poi ordinati in base alla distanza più vicina e più lontana nei risultati della query. Puoi anche ignorare questo ordinamento definendo un ordinamento secondario diverso da $natural nella query. L'operatore $near deve esistere in un campo del documento nel filtro della query e deve contenere un campo GeoJSON $geometry.
Nell'esempio seguente, l'operatore $near viene utilizzato per calcolare la distanza
tra il punto geografico (-122.084, 37.4221) e i punti geografici che si trovano nel
campo location di tutti i documenti in myCollection.. I documenti vengono restituiti
e ordinati in base alla distanza più vicina e più lontana tra i due punti.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
Puoi anche utilizzare i campi facoltativi $maxDistance e $minDistance
per controllare la distanza in metri dal punto della query.
L'esempio seguente mostra una query in cui i documenti restituiti devono trovarsi a una distanza compresa tra 500 e 2000 metri dal punto (-122.084, 37.4221):
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
Se l'indice è partizionato, puoi filtrare in base alla partizione
includendo la partizione in un filtro di uguaglianza "and" all'interno della query.
Ad esempio, se avevi una partizione region e volevi filtrare i risultati della query in base alla regione midwest, potevi fare quanto segue:
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
Il valore della partizione deve essere una stringa. Il filtro di partizione deve essere
unito alla query di ricerca da un operatore $and.
Limitazioni
- Gli operatori
$neare$textnon possono essere utilizzati nella stessa query. $nearnon può essere nidificato in un'istruzione$orcon più clausole, a meno che$nearnon sia l'unica espressione nella clausola$or.$nearnon può essere utilizzato con gli operatori$noto$norin una query.$nearnon è supportato nelle query di aggregazione.