平面上の指定した形状内のロケーション データをクエリするには、 $geoWithin演算子を使用します。 平面に表示されるデータとともに$geoWithinを使用するには、次の構文を使用します。
db.<collection>.find( { <location field> : { $geoWithin : { <shape operator> : <coordinates> } } } )
クエリでこれらの値を置き換えます。
フィールド | 説明 |
|---|---|
| クエリするコレクション。 |
| 位置データを含む フィールド。 平面に対するクエリの場合、データはlegacy coordinate pairs として保存する必要があります。 |
| |
| クエリする形状のエッジを定義する座標。 経度と緯度の座標を指定する場合は、最初に経度、次に緯度を指定します。
|
このタスクについて
$geoWithin には地理空間インデックスは必要ありません。 ただし、地理空間インデックスを使用するとクエリのパフォーマンスが向上します。
始める前に
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 が含まれています。
手順
$geoWithinを使用してcontactsコレクションをクエリします。 次の$geoWithinクエリでは、 $box演算子を使用して、指定された範囲に表示されるドキュメントを返します。
db.contacts.find( { address: { $geoWithin: { $box: [ [ 49, 40 ], [ 60, 60 ] ] } } } )
出力:
[ { _id: ObjectId("647e4e496cdaf4dc323ec92a"), name: 'Evander Otylia', phone: '202-555-0193', address: [ 55.5, 42.3 ] } ]
$box演算子の値は、クエリ対象の正方形の左下と右上の隅を表します。
前述の$geoWithinクエリでは、次の冗長性を持つ正方形内にあるドキュメントが返されます。
[ 49, 40 ][ 49, 60 ][ 60, 60 ][ 60, 40 ]
詳細
$geoWithin演算子を他の形状で使用する方法については、次のページを参照してください。
多角形内でクエリを実行するには、
$polygonを参照してください。円内でクエリを実行するには、
$centerを参照してください。