この章では、MongoDBの地理空間クエリ機能の1つが紹介されており、距離に基づいてドキュメントデータをクエリする機能について説明しています。

アプリケーションシナリオ:近くの店舗を検索し、近くの人を見つける。

必須チュートリアル

MongoDB地理空間データストレージフォーマット

距離に基づいてデータをクエリするための前提条件は次のとおりです。

  • 各ドキュメントデータには、座標データを格納するフィールドが含まれており、例えば、locationフィールドには店舗の座標が格納されています。
  • 2dsphereまたは2d空間インデックスを作成します。

$near演算子

MongoDBは$near演算子を使用して、距離に基づいてドキュメントデータをクエリします。

フォーマット:

{
   <location field>: { // 座標データを格納するフィールド
     $near: {
       $geometry: { // 比較のための参照座標を設定
          type: "Point" ,
          coordinates: [ 経度 , 緯度 ]
       },
       $maxDistance: 最大距離(メートル単位),
       $minDistance: 最小距離(メートル単位)
     }
   }
}

注意:$nearクエリによって返されるデータは、最も近いものから最も遠いものの順に並べられます。

shopコレクションには各店舗の座標がlocationフィールドに格納されており、最も近い店舗を見つけるクエリは次のとおりです(最小距離1000メートル、最大距離5000メートル)。

db.shop.find(
   {
     location:
       { $near :
          {
            $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] }, // 私の座標
            $minDistance: 1000, // 最小距離
            $maxDistance: 5000 // 最大距離
          }
       }
   }
)