Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

2d インデックスの内部構造

項目一覧

  • 2dインデックスのジオハッシュ値の計算
  • 2dインデックスのマルチロケーション ドキュメント

このドキュメントでは、MongoDB の2d地理空間インデックスの内部構造についてより詳しく説明します。 この素材は通常の操作やアプリケーション開発には必要ありませんが、トラブルシューティングやさらなる理解に役立つ場合があります。

legacy coordinate pairs に地理空間インデックスを作成すると、MongoDB は指定された ロケーション範囲 内の座標ペアの ジオハッシュ 値を計算し、ジオハッシュ値をインデックス化します。

ジオハッシュ値を計算するには、2 次元マップを四半期ごとに再帰的に分割します。 次に、各四半期に 2 ビットの値を割り当てます。 たとえば、4つの四半期の 2 ビット表現は次のようになります。

01 11
00 10

これらの 2 ビットの値( 00011011 )は、各四捨五入と各構成要素内のすべてのポイントを表します。 2 ビットの解像度のジオハッシュの場合、左下の四捨五入のすべてのポイントのジオハッシュは00になります。 左上の四捨五入のジオハッシュは01になります。 右下と右上では、それぞれ1011のジオハッシュが含まれます。

精度を高めるには、各四半期をサブクエリーに分割し続けます。 各サブクォーラントには、含まれているクォーラントの ジオハッシュ 値がサブクォーラントの値と連結されています。 右上四捨五入のジオハッシュは11で、サブ四捨五入のジオハッシュは(左上から順に)それぞれ1101111111101100になります。

注意

2d地理空間インデックスは 1 つのドキュメント内の複数の地理空間フィールドをサポートしていませんが、マルチキー インデックスを使用して 1 つのドキュメントに複数の座標ペアをインデックスできます。 最も単純な例では、 フィールド(例: 次の例のように、座標の配列を保持するlocs )。

db.places.save( {
locs : [ [ 55.5 , 42.3 ] ,
[ -74 , 44.74 ] ,
{ lng : 55.5 , lat : 42.3 } ]
} )

配列の値は、 [ 55.5, 42.3 ]の場合は配列、または{ lng : 55.5 , lat : 42.3 }の場合は埋め込みドキュメントのいずれかです。

次に、次のように、 locsフィールドに地理空間インデックスを作成できます。

db.places.createIndex( { "locs": "2d" } )

また、位置データを埋め込みドキュメント内のフィールドとしてモデル化することもできます。 この場合、ドキュメントにはフィールド(例: addresses )は、各ドキュメントがフィールド(例: 位置座標を保持するloc: )。 例:

db.records.save( {
name : "John Smith",
addresses : [ {
context : "home" ,
loc : [ 55.5, 42.3 ]
} ,
{
context : "work",
loc : [ -74 , 44.74 ]
}
]
} )

次に、次の例のように、 addresses.locフィールドに地理空間インデックスを作成できます。

db.records.createIndex( { "addresses.loc": "2d" } )

戻る

2d インデックスのクエリ