2010-12-31 6 views
6

は、デフォルトで、Mongoのは、緯度/経度として扱いと言う:Mongoで地理空間クエリを実行するにはどうすればよいですか?ドキュメントの

デフォルトでは、索引を使用すると、 割り出し緯度/経度であり、したがって[-180のために構成さ あると仮定します。 .180] 値の範囲。

それでは、私は私の文書でこれを持っているとしましょう:

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

私は私のインデックスを確認してください。今

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

を、どのように私はモンゴで次のコマンドを実行しますか? $maxDistanceと接続詞で

  • 私に特定の緯度/経度の5マイル内にあるすべての文書を与える
  • 私に特定の緯度/経度の400メートル内のすべての文書を与える

答えて

6

使用$near

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

$maxDistanceの単位はlocフィールド、すなわち度と同じです。正確に覚えていれば、度は赤道で約69マイル(111キロメートル)です(ただし、他の緯度ではそれほど正確ではありません)。

返された場所の詳細については、geoNearコマンドを使用すると、返されたすべてのコレクションの距離などがわかります。私はまた、あなたの問題を解決するために$geoWithinを使用することができると思うhttp://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand

参照してください:

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

これは3959分の5度の半径(50、50)を中心とする円内のすべての場所を見つける必要があります(つまり、 5マイル)。

+0

あなたは最高です! – Ali

関連する問題