Haystack インデックスの作成
重要
MongoDB 5.0 で削除
MongoDB 5.0では、非推奨の geoHaystackインデックスと geoSearch
コマンドが削除されます。 代わりに、 またはサポートされている$geoNear
地理空間クエリ演算子 のいずれかを使用した2 d インデックス を使用してください。
MongoDB インスタンスを 5.0 にアップグレードし、featureCompatibilityVersion を 5.0
に設定すると、既存の geoHaystack インデックスがすべて削除されます。
haystack インデックスは、ロケーション フィールドと 2 番目の フィールドの 2 つのフィールドを参照する必要があります。 2 番目のフィールドは完全一致に使用されます。 Haystack インデックスは、ロケーションと 1 つの追加条件での完全一致に基づいてドキュメントを返します。 これらのインデックスは、特定の場所に最も近いドキュメントを返すには必ずしも適していません。
haystack インデックスを構築するには、次の構文を使います。
db.coll.createIndex( { <location field> : "geoHaystack" , <additional field> : 1 } , { bucketSize : <bucket value> } )
haystack インデックスを構築するには、インデックスの作成時にbucketSize
オプションを指定する必要があります。 5
のbucketSize
は、指定された経度と緯度の5単位内のロケーション値をグループ化するインデックスを作成します。 bucketSize
は、インデックスの粒度も決定します。 データのディストリビューションに パラメーターを調整して、通常は非常に小さなリージョンのみを検索するようにできます。 バケットで定義された領域は重複することができます。 ドキュメントは複数のバケットに存在できます。
例
次のようなフィールドを含むドキュメントを含む コレクションがある場合:
{ _id : 100, pos: { lng : 126.9, lat : 35.2 } , type : "restaurant"} { _id : 200, pos: { lng : 127.5, lat : 36.1 } , type : "restaurant"} { _id : 300, pos: { lng : 128.0, lat : 36.7 } , type : "national park"}
次の操作では、経度または緯度の1単位以内のキーを保存するバケットで haystack インデックスが作成されます。
db.places.createIndex( { pos : "geoHaystack", type : 1 } , { bucketSize : 1 } )
このインデックスは、2 つの異なるバケットに値200
を持つ_id
フィールドを持つドキュメントを保存します。
_id
フィールドの値が100
であるドキュメントを含むバケット内_id
フィールドの値が300
であるドキュメントを含むバケット内
haystack インデックスを使用してクエリを実行するには、 geoSearch
コマンドを使用します。 「 Haystack インデックスのクエリ 」を参照してください。
デフォルトでは、haystack インデックスを使用するクエリは50ドキュメントを返します。