2017-06-27 18 views
1

私はreact geosuggestパッケージを使用して、私のイベントの場所をMongoDBに保存しています。パッケージには、Googleの場所からデータを受け取り、私はそれを保存するたびに、それは次のように格納されます:ジオロケーションに基づいてすべてのmongoDBドキュメントを見つける方法

"_id": "vvagbSbEginyrQGK8", 
"name": "test3", 
"googleLocation": { 
    "label": "Testaccio, Roma, Italia", 
    "placeId": "ChIJE47T5i5gLxMRhiCxCUAFq4Q", 
    "isFixture": false, 
    "gmaps": { 
     "address_components": [ 
      { 
       "long_name": "Monte Testaccio", 
       "short_name": "Monte Testaccio", 
       "types": [ 
        "establishment", 
        "natural_feature" 
       ] 
      }, 
      { 
       "long_name": "Rome", 
       "short_name": "Rome", 
       "types": [ 
        "locality", 
        "political" 
       ] 
      }, 
      { 
       "long_name": "Rome", 
       "short_name": "Rome", 
       "types": [ 
        "administrative_area_level_3", 
        "political" 
       ] 
      }, 
      { 
       "long_name": "Metropolitan City of Rome", 
       "short_name": "RM", 
       "types": [ 
        "administrative_area_level_2", 
        "political" 
       ] 
      }, 
      { 
       "long_name": "Lazio", 
       "short_name": "Lazio", 
       "types": [ 
        "administrative_area_level_1", 
        "political" 
       ] 
      }, 
      { 
       "long_name": "Italia", 
       "short_name": "IT", 
       "types": [ 
        "country", 
        "political" 
       ] 
      }, 
      { 
       "long_name": "00153", 
       "short_name": "00153", 
       "types": [ 
        "postal_code" 
       ] 
      } 
     ], 
     "formatted_address": "Monte Testaccio, 00153 Rome, Italia", 
     "geometry": { 
      "location": {}, 
      "location_type": "APPROXIMATE", 
      "viewport": { 
       "f": { 
        "b": 41.87460301970851, 
        "f": 41.87730098029151 
       }, 
       "b": { 
        "b": 12.474345019708494, 
        "f": 12.477042980291571 
       } 
      } 
     }, 
     "place_id": "ChIJE47T5i5gLxMRhiCxCUAFq4Q", 
     "types": [ 
      "establishment", 
      "natural_feature" 
     ] 
    }, 
    "location": { 
     "lat": 41.87595200000001, 
     "lng": 12.475693999999976 
    } 
} 

私は、クエリ近くのMongoDBと異なるクエリの多くを試してみたが、私はそれを把握することはできません。たとえば、私が送信した経度と緯度に基づいて10000メートル以内のすべてのドキュメントを見つけるクエリについて知っている人

答えて

1

現在のバージョンのmongodbによれば、Gospatialクエリ演算子があり、以下のような場所が含まれているコレクションの変更:

まずあなたがコレクションのために、「2dsphere」インデックスを作成する必要がありますが、のは、以下のように「場所」という名前を付けてみましょう:

特定の原点との距離範囲についてすると
db.places.createIndex({ loc : "2dsphere" }); 
/* 
the document should contain "loc" property as following: 
{ 
    loc : { type: "Point", coordinates: [ -73.88, 40.78 ] }, 
    //+ the other needed properties. 
} 
*/ 

次のクエリを適用できます。

db.places.find(
{ 
    loc: 
    { $near : 
    { 
     $geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] 
     //the origin point. 
     }, 
     $minDistance: 1000, //in meter 
     $maxDistance: 5000 //in meter 
     } 
    } 
} 
) 

座標は[long、lat]のように順序付けられていることに注意してください。

  1. 2Dshpere indexes
  2. Geospatial operators
:あなたは以下のリンクでのMongoDBのドキュメントを確認することができます詳細については

関連する問題