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

地理空間インデックスの制限

項目一覧

  • 照合オプション
  • カバード クエリ
  • シャードキー
  • を使用した複数の地理空間インデックス $geoNear
  • サポートされているデータ型
  • インデックス キーの数
  • 平面での完全一致
  • 詳細

2 d2 dsphereインデックスは地理空間インデックスです。 地理空間インデックスには次の制限があります。

2 d インデックスは照合オプションをサポートしておらず、バイナリ比較のみをサポートします。 バイナリ比較では、各 string 内の各文字の数値 Unicode 値が比較され、大文字と小文字またはアクセント記号は考慮されません。

単純ではない照合順序を持つコレクションに 2d インデックスを作成するには、インデックスの作成時に { collation: { locale: "simple" } }を明示的に指定する必要があります。

たとえば、照合順序が{ locale: "en" }である、 collationTestという名前のコレクションを考えてみましょう。

db.createCollection(
"collationTest",
{
collation: { locale: "en" }
}
)

collationTestコレクションに 2D インデックスを作成するには、 { collation: { locale: "simple" } }を指定する必要があります。 このコマンドは、 locフィールドに 2D インデックスを作成します。

db.collationTest.createIndex(
{
loc: "2d"
},
{
collation: { locale: "simple" }
}
)

地理空間インデックスは、 クエリをカバー できません。

地理空間インデックスをシャードキーとして使用することはできません。 ただし、別のフィールドをシャードキーとして使用して、シャーディングされたコレクションに地理空間インデックスを作成することはできます。

コレクションに複数の地理空間インデックスがある場合は、 $geoNearパイプライン ステージを実行するときに、 $geoNear keyオプションを指定する必要があります。 keyオプションは、クエリをサポートするために使用するインデックスを指定します。

2 dsphere インデックスでインデックス付けされたフィールドにはジオメトリ データが含まれている必要があります。 形状データは次のいずれかになります。

次の操作はできません。

  • 2 dsphere インデックスでインデックス付けされているフィールドに非ジオメトリ データを含むドキュメントを挿入します。

  • 非ジオメトリ データを含むフィールドに2 dsphere インデックスを構築します。

2 dsphere インデックスを作成すると、 mongodGeoJSON シェイプを内部表現にマッピングします。 結果として得られる内部表現は、値の大きな配列になる可能性があります。

indexMaxNumGeneratedKeysPerDocument設定は、メモリ不足エラーを防ぐために、単一のドキュメントに対して生成されるキーの最大数を制限します。 If an operation requires more keys than the indexMaxNumGeneratedKeysPerDocument parameter specifies, the operation fails.

デフォルトでは、サーバーではドキュメントごとに最大100,000のインデックス キーが許可されます。 より多くのインデックス キーを許可するには、 indexMaxNumGeneratedKeysPerDocumentの値を引き上げます。

2 d インデックスでは、座標ペアでの完全一致のパフォーマンスは向上しません。

たとえば、以下のドキュメントのある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フィールドに2 d インデックスを使用しても、次のクエリのパフォーマンスは向上しません

db.contacts.find( { address: [ 55.5, 42.3 ] } )

このクエリのパフォーマンスを向上させるには、 addressフィールドに昇順または降順のインデックスを作成します。

db.contacts.createIndex( { address: 1 } )

戻る

ラジアンへの計算