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の限界-75maxの限界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 インデックスを使用して、近接性クエリなどの位置データの計算を実行できます。