Docs Menu
Docs Home
/
データベース マニュアル
/ / / / /

2d インデックスのロケーション範囲の定義

項目一覧

  • このタスクについて
  • 始める前に
  • 手順
  • 結果
  • 次のステップ
  • 詳細

2 d インデックスに含まれる座標の範囲を定義できます。 デフォルトでは、 2 d インデックスの経度と緯度の境界は次のとおりです。

  • 以上 -180

  • 未満 180

2d インデックスのロケーション範囲を変更するには、インデックスを作成するときにmin maxオプションと オプションを指定します。

db.<collection>.createIndex(
{
<location field>: "2d"
},
{
min: <lower bound>,
max: <upper bound>
}
)

minmaxの境界は包括的であり、経度と緯度の両方に適用されます。

重要

2d インデックスのデフォルトのロケーション境界では、-90 未満、90 より大きい緯度が許可されます。これは無効な値です。 これらの無効なポイントを含む地理空間クエリの動作は定義されていません。

2d インデックスに対してより小さいロケーション範囲を定義すると、インデックスに保存されるデータ量が減り、クエリのパフォーマンスが向上する可能性があります。

コレクションにインデックスのロケーション範囲外の座標データが含まれている場合、2d インデックスは作成できません。

2d インデックスを作成した後、インデックスのロケーション範囲外の座標データを含むドキュメントを挿入することはできません。

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 が含まれています。

addressフィールドに 2D インデックス を作成します。 次のロケーションの境界を指定します。

  • min の限界 -75

  • max の限界 60

db.contacts.createIndex(
{
address: "2d"
},
{
min: -75,
max: 60
}
)

インデックスはより小さなロケーション範囲をカバーし、デフォルトの 2d インデックスよりもパフォーマンスが向上します。

インデックスの作成後は、インデックスのロケーション範囲外の座標データを含むドキュメントを挿入することはできません。 たとえば、次のドキュメントは挿入できません

db.contacts.insertOne(
{
name: "Paige Polson",
phone: "402-555-0190",
address: [ 70, 42.3 ]
}
)

addressフィールドの経度の値は70で、この値は60maxの限界よりも高いです。

2d インデックスを使用して、近接性クエリなどの位置データの計算を実行できます。

戻る

ロケーションの精度