次のセクションでは、 2dインデックスでサポートされているクエリについて説明します。
平面上で定義された形状内の点
平面上の特定の形状内にあるすべての legacy coordinate pairs を選択するには、 $geoWithin演算子と 形状演算子を併用します。 次の構文を使用します。
db.<collection>.find( { <location field> : { $geoWithin : { $box|$polygon|$center : <coordinates> } } } )
次のクエリでは、左下隅の[ 0
, 0 ]と右上隅の[ 100 , 100 ]によって定義された正方形内のドキュメントをクエリします。
db.places.find( { loc : { $geoWithin : { $box : [ [ 0 , 0 ] , [ 100 , 100 ] ] } } } )
次のクエリでは、 [ -74 , 40.74 ]を中心とし、半径が10の円内にあるドキュメントをクエリします。
db.places.find( { loc: { $geoWithin : { $center : [ [-74, 40.74 ] , 10 ] } } } )
各シェイプの構文と例については、以下を参照してください。
球体上で定義された円内の点
MongoDB はレガシー理由で平面2dインデックスで初期球面クエリをサポートしています。 一般に、球面計算では2dsphereインデックスを使用する必要があります(詳しくは、「 2dsphereインデックス 」を参照してください)。
球体上の「球面上限」内の legacy coordinate pairs をクエリするには、 演算子とともに$geoWithin $centerSphereを使用します。以下を含む配列を指定します。
円の中心点のグリッド座標
ラジアンで測定された円の半径。 ラジアンを計算するには、「球面ジオメトリを使用して距離を計算する 」を参照してください。
次の構文を使用します。
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
次のサンプルクエリでは、経度88 Wと緯度30 Nの 10 マイル以内にあるすべてのドキュメントが返されます。 この例では、距離を地球のおおよその等価半径(3963.2 マイル)で割った値をラジアンに変換します。
db.<collection>.find( { loc : { $geoWithin : { $centerSphere : [ [ 88 , 30 ] , 10 / 3963.2 ] } } } )
平面上の点に近接
近接性クエリは、定義された点に最も近い legacy coordinate pairs を返し、結果を距離順にソートします。 $near演算子のいずれかを使用します。 演算子には2dインデックスが必要です。
$near演算子は、次の構文を使用します。
db.<collection>.find( { <location field> : { $near : [ <x> , <y> ] } } )
例については、 $nearを参照してください。
平面での完全一致
2dインデックスを使用して座標ペアの完全一致を返すことはできません。 完全一致を返すには、座標を保存するフィールドで昇順または降順のスカラー インデックスを使用します。
次の例では、 {
'loc': 1}インデックスがある場合、 find()操作はロケーションの完全一致を返します。
db.<collection>.find( { loc: [ <x> , <y> ] } )
このクエリは、値が[ <x> , <y> ]であるすべてのドキュメントを返します。