平面上の指定した点の近くに表示されるロケーション データをクエリできます。
指定した点の近くの位置データをクエリするには、 $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 ] } ]
結果は、クエリ点からの距離が最も近いものから最も遠いものの順にソートされます。
詳細
球面で近接クエリを実行するには、「 球体上の点近くのロケーションのクエリ 」を参照してください。