2d インデックスのロケーション範囲の定義
2 d インデックスに含まれる座標の範囲を定義できます。 デフォルトでは、 2 d インデックスの経度と緯度の境界は次のとおりです。
以上
-180
未満
180
2d インデックスのロケーション範囲を変更するには、インデックスを作成するときにmin
max
オプションと オプションを指定します。
db.<collection>.createIndex( { <location field>: "2d" }, { min: <lower bound>, max: <upper bound> } )
min
とmax
の境界は包括的であり、経度と緯度の両方に適用されます。
このタスクについて
重要
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
で、この値は60
のmax
の限界よりも高いです。
次のステップ
2d インデックスを使用して、近接性クエリなどの位置データの計算を実行できます。