2011-10-20 13 views
26

Kafamı MongoDB ve jeo-uzamsal aramalar etrafında tutmaya çalışıyorum. Temelde istediğim, kullanıcıların mevcut konumdan belirli bir mesafe içinde 'un çekildiği belgeleri (görüntüleri) sorgulayabilmeleridir. Bu yüzden kullanıcı, durduğu yerden 1 km mesafede çekilen tüm görüntüleri arıyor. Aşağıdaki örnekte kullanmayı deniyorum, ancak maxdistance değeri olarak neyin ayarlanacağına dair hiçbir fikrim yok. Ben 1 km'lik mesafe içinde belgeler arıyorum eğerBirimler maxdistance ve MongoDB için kullanılacak mı?

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

Benim soru ben maxDistance olarak neyi ayarlarım edilir?

Burada tamamen sıkışmış durumdayım.

cevap

62

km sınırı olan mongodb $near sorgularını kullanmak için, yarıçap değerini km olarak dönüştürmeniz gerekir. Varsayılan olarak mongodb $ yakınında $maxDistanceradius kabul edilir. km kullanılarak, ya da sorunuzun derecesini

kullanılarak olduğu gibi mesafeyi ayrılırken 111.12 tarafından

dönüştürme mesafesi (bir dereceye yaklaşık 111.12 kilometre olduğu) Ben eğer ben maxDistance olarak ayarlanmış ne

Bir 1 km yarıçapındaki belgeler için arama yapılıyor mu?

kullanabileceğiniz bu

db.places.find({ loc : { $near : [50,50] , $maxDistance : 1/111.12 } }) 

Ben mongo geospatial features here in detail nasıl kullanılacağını yanıtladım. Eğer böyle $ maxDistance bir değeri olarak metre olarak doğrudan yarıçapı belirtebilirsiniz sürümü MongoDB 2.4 yana

+0

Serin, teşekkür! $ Near ve $ nearSphere arasındaki fark nedir? –

+13

$ yakınında, düz bir toprağın idealize edilmiş bir modelini varsayar, yani enlem (y) ve boylam (x), her yerde aynı mesafeyi temsil eder. Böylece sonuçları elde etmek için yarıçapı 111 veya 69'a çevirmeniz gerekecek. Fakat işte bu işi elde edebilmek için yarıçapı (6371 km veya 3959 mil) çevirmeniz gerekiyor ... [burada] hakkında daha fazla bilgi edinebilirsiniz. : //www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat) – RameshVel

+0

Bir kesir sorgulamak mümkün mü? – Karl

15

bakabilirsiniz:

db.<collection>.find({loc: {$near : 
           {$geometry : 
            { 
            type: 'Point', 
            coordinates: [<longitude> , <latitude>]  
            } 
           }, 
           $maxDistance: 10*100 
          } 
        }); 
+1

Dizine bağlı. Eğer indeks '2d' ise bu işe yaramaz, çünkü 2d-indeksi« radyan formatı »olduğunu varsayar. Öte yandan indeks '2dsphere' ise, siz haklısınız. :-) Dokümantasyon: https://docs.mongodb.com/manual/reference/operator/query/near/#query-on-legacy-coordinates – qualbeen

İlgili konular