平面上の形状内のロケーションのクエリ
平面上の指定した形状内のロケーション データをクエリするには、 $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
を参照してください。