平面上の点近くのロケーションの検索
平面上の指定した点の近くに表示されるロケーション データをクエリできます。
指定した点の近くの位置データをクエリするには、 $near
演算子を使用します。
db.<collection>.find( { <location field> : { $near : [ <longitude>, <latitude> ], $maxDistance : <distance in meters> } } )
このタスクについて
$near
演算子で座標ペアを指定する場合は、最初に経度、次に緯度を指定します。有効な経度の値は、
-180
以上、180
以下です。有効な緯度の値は
-90
以上、90
以下です。
$maxDistance
フィールドに距離をメートル単位で指定します。
始める前に
contacts
コレクションを次のように作成します。db.contacts.insertMany( [ { name: "Evander Otylia", phone: "202-555-0193", address: [ 55.5, 42.3 ] }, { name: "Georgine Lestaw", phone: "714-555-0107", address: [ -74, 44.74 ] } ] ) address
フィールドにはlegacy coordinate pairs が含まれています。$near
演算子を使用して位置データをクエリするには、位置データを含む フィールドに地理空間インデックスを作成する必要があります。address
フィールドに 2D インデックス を作成します。db.contacts.createIndex( { address: "2d" } )
手順
コレクションをクエリするには、 $near
を使用します。 次の$near
クエリは、座標ペア[ -73.92, 40.78 ]
から 50 メートル以内にaddress
フィールドがあるドキュメントを返します。
db.contacts.find( { address: { $near: [ -73.92, 40.78 ], $maxDistance : 50 } } )
出力:
[ { _id: ObjectId("640a3dd9c639b6f094b00e89"), name: 'Georgine Lestaw', phone: '714-555-0107', address: [ -74, 44.74 ] } ]
結果は、クエリ点からの距離が最も近いものから最も遠いものの順にソートされます。
詳細
球面で近接クエリを実行するには、「 球体上の点近くのロケーションのクエリ 」を参照してください。