Utilizza le query geospaziali nelle operazioni compatibili con MongoDB per eseguire query sui documenti che si trovano entro un determinato intervallo da una longitudine e una latitudine specifiche.
Prima di iniziare
Assicurati di avere almeno un indice 2dsphere o crea un indice 2dsphere.
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 dalla distanza più vicina a quella più lontana nei risultati della query. Puoi anche sostituire 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
location campo di tutti i documenti in myCollection. I documenti vengono restituiti
e ordinati in base alla distanza più vicina a quella 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 ad almeno 500 metri e al massimo 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 procedere nel seguente modo:
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 della 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$ora 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.