2010-12-31 23 views
6

nella documentazione, si dice che per impostazione predefinita, Mongo lo considera il più a lungo LAT /:Come si esegue una query geospaziale in Mongo?

Per impostazione predefinita, l'indice assume sei indicizzazione di latitudine/longitudine e è quindi configurato per un [-180. .180] Intervallo di valori .

Quindi, diciamo che ho questo nel mio documento:

post['loc'] = [ -40.234, 56.222] 
db.mycollection.save(post) 

assicuro il mio indice:

db.mycollection.ensureIndex({"loc":"2d"}) 

Ora, come faccio a eseguire quanto segue in Mongo?

  • Dammi tutti i documenti che si trovano entro 5 miglia di una certa latitudine/longitudine
  • Dammi tutti i documenti a 400 metri di una certa latitudine/longitudine

risposta

6

Usa $near in congiunzione con $maxDistance:

db.mycollection.find({loc: {$near: [50, 50], $maxDistance: 5}}) 

l'unità di $maxDistance è lo stesso campo loc, cioè gradi. Un grado è di circa 69 miglia o 111 km all'equatore, se non ricordo male (ma è meno alle altre latitudini, la distanza esatta è difficile da calcolare).

Per ottenere ulteriori informazioni sulle posizioni restituite, è possibile utilizzare il comando geoNear, che indica la distanza di tutte le raccolte restituite, tra le altre cose. Vedo http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand

Penso che si può anche utilizzare $geoWithin per risolvere il problema:

db.mycollection.find({loc: {$geoWithin: {$center: [[50, 50], 5/3959]}}}) 

Questo dovrebbe trovare tutte le posizioni all'interno del cerchio centrato a (50, 50), con un raggio di 5/3959 gradi (cioè 5 miglia).

+0

Sei il migliore! – Ali

Problemi correlati