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, dal più vicino al più lontano, 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 includendola 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.