MongoDB 互換オペレーションで地理空間クエリを使用して、特定の経度と緯度から特定の範囲内に存在するドキュメントをクエリします。
始める前に
既存の MongoDB 互換オペレーション データベースにアクセスできることを確認します。または、データベースを作成して接続します。
少なくとも 1 つの 2dsphere インデックスがあることを確認するか、2dsphere インデックスを作成します。
GeoJSON オブジェクト
コレクション内のフィールドに対して地理空間クエリを実行するには、クエリするフィールドが GeoJSON オブジェクトまたは GeoPoint である必要があります。
地理空間クエリを実行する
地理空間クエリを実行するには、$near 演算子を使用します。この演算子は、ドキュメント内の地理ポイントに対する地理ポイントの距離を計算します。これらのドキュメントは、クエリ結果で距離が最も近いものから最も遠いものの順に並べ替えられます。この並べ替え順序をオーバーライドするには、クエリで $natural 以外のセカンダリ並べ替えを定義します。$near 演算子は、クエリフィルタのドキュメント フィールドに存在し、$geometry GeoJSON フィールドを含む必要があります。
次の例では、$near 演算子を使用して、地理ポイント (-122.084, 37.4221) と、myCollection. 内のすべてのドキュメントの location フィールドにある地理ポイントとの距離を計算します。ドキュメントは、2 つのポイント間の距離が近い順に返されます。
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
オプションの $maxDistance フィールドと $minDistance フィールドを使用して、クエリのポイントからの距離(メートル単位)を制御することもできます。次の例は、返されるドキュメントがポイント (-122.084, 37.4221) から 500 メートル以上 2,000 メートル以内にある必要があるクエリを示しています。
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
インデックスがパーティション分割されている場合は、クエリ内の「and」等価フィルタにパーティションを含めることで、パーティションに基づいてフィルタできます。たとえば、region パーティションがあり、クエリ結果を midwest リージョンでフィルタする場合は、次のようにします。
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
パーティションの値は文字列にする必要があります。パーティション フィルタは、$and 演算子で検索クエリに結合する必要があります。
制限事項
$near演算子と$text演算子を同じクエリで使用することはできません。$nearが$or句の唯一の式でない限り、$nearを複数句の$orステートメントにネストすることはできません。$nearは、クエリで$not演算子または$nor演算子と併用できません。$nearは集計クエリではサポートされていません。