2010-12-31 8 views
6

, varsayılan olarak, Mongo/enlem uzun gibi değerlendirir söylüyor: Varsayılan olarakMongo'da bir coğrafi sorguyu nasıl çalıştırırım? docs yılında

, endeks sen indeksleme enlem/boylam varsayar ve böylece [-180 için yapılandırılmış olduğunu. .180] değer aralığı.

Yani, Dokümanıma bu olduğunu varsayalım:

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

Şimdi, nasıl Mongo aşağıdaki komutu yürütün yapın:

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

benim indeksi sağlamak?

  • Bana 5 mil mesafede bulunan tüm belgeleri ver belli lat
  • $maxDistance ile paralel olarak belli bir enlem/boylam

cevap

6

Kullanım $near 400 metre uzağında bana tüm belgeleri ver/uzun:

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

$maxDistance birim loc alanında, yani derece ile aynıdır. Ekvatorda bir derece yaklaşık 69 mil veya 111 km, eğer doğru hatırlıyorum (ancak diğer enlemlerde daha az, tam mesafe hesaplamak zordur).

Döndürülmüş konumlar hakkında daha fazla bilgi almak için, diğer şeyler arasında, iade edilen tüm koleksiyonların uzaklığını size söyleyen geoNear komutunu kullanabilirsiniz. Ben de sorunu çözmek için $geoWithin kullanabilirsiniz düşünüyorum http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand

Bkz:

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

Bu 5/3959 derecelik yarıçapında (50, 50) Circle merkezli içindeki tüm konumları bulmak gerekir (yani 5 mil).

+0

En iyisi sizsiniz! – Ali