Docs Menu
Docs Home
/ / /
Ruby MongoDB ドライバー
/

インデックスの作成

項目一覧

  • インデックスの作成
  • インデックスの削除
  • インデックスをリスティングする

このドライバーでは、 indexes属性を使用してコレクションのインデックスを作成、削除、表示する機能が提供されます。

client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'music')
client[:bands].indexes
# => #<Mongo::Index::View:0x000055e2822b9318 @collection=#<Mongo::Collection:0x660 namespace=music.bands>, @batch_size=nil, @options={}>

インデックスは一度に 1 つずつ作成することも、1 回の操作で複数作成することもできます。 MongoDB 3.0 以降で複数のインデックスを作成する場合、それらのインデックスは並列に作成されます。以前のバージョンでは、順番に作成されます。

単一インデックスを作成するには、 indexes#create_oneを使用して、最初の引数としてキー仕様を渡し、2 番目の引数としてオプションを渡します。

client[:bands].indexes.create_one(genre: 1)
client[:bands].indexes.create_one(
{ name: 1 },
unique: true, expire_after: 120,
)

複数のインデックスを作成するには、インデックス仕様の配列を受け入れるindexes#create_manyを使用します。 create_oneと違い、各インデックス仕様はハッシュであり、キー仕様にマッピングされたkeyキーとオプションが最上位レベルで指定されます。

client[:bands].indexes.create_many([
{ key: { genre: 1 } },
{ key: { name: 1 }, unique: true, expire_after: 120 },
])

以下は、インデックスの作成時に追加できるオプションの完全なリストです。 これらのオプションは、 createIndex コマンドでサポートされているオプションをミラーリングします。

オプション
説明
:background
trueまたはfalseのいずれか。 インデックスをバックグラウンドで作成するように指示します。
:expire_after
コレクション内のドキュメントが期限切れになる秒数。
:name
インデックスの名前。
:sparse
インデックスをスパースにするかどうかは、 trueまたはfalseのいずれかです。
:storage_engine
この特定のインデックスの ストレージ エンジンの名前。
:version
使用するインデックス形式のバージョン。
:default_language
テキスト インデックスのデフォルト言語。
:language_override
デフォルト言語を上書きするときに使用するフィールド名。
:text_version
テキストインデックス ストレージのバージョン 形式。
:weights
テキスト検索でフィールドと重みを指定するドキュメント。
:sphere_version
2d sphere インデックス バージョン
:bits
2d インデックスの緯度と経度の最大境界を設定します。
:max
2d インデックスの緯度と経度の最大境界。
:min
2d インデックス内の緯度と経度の最小境界。
:bucket_size
geo haystack インデックスのロケーション値をグループ化するユニットの数。
:partial_filter_expression
部分インデックスのフィルター。
:hidden
インデックスを 非表示 にするかどうかを指定するブール値。非表示インデックス とは、コレクションに存在してもクエリ プランナーによって使用されることのないインデックスです。

MongoDB サーバー バージョン 4.4 以降では、インデックス作成時に:commit_quorumオプションを指定できます。 このオプションは、個々のインデックスの動作を決定するのではなく、インデックスの作成中にサーバーの動作を決定するという点で他のインデックス オプションと異なります。

:commit_quorumオプションは、インデックスが準備される前にインデックス ビルドを完了する必要があるレプリカセットの投票権のあるデータを保持するノードの数を指定します。 可能な値は、整数(0 から投票権があり、レプリカセットのデータを保持するノードの数)、"majority"、または " Atlas Vectors" です。

インデックスを 1 つ作成するときに:commit_quorumを指定するには、 indexes#create_oneメソッドの 2 番目の引数に別のオプションを追加します。

client[:bands].indexes.create_one(
{ name: 1 },
unique: true, expire_after: 120, commit_quorum: 'majority'
)

複数のインデックスを作成するときに作成オプションを指定するには、 indexes#create_manyに渡されるインデックスの配列に最終要素として:commit_quorumを指定するハッシュを追加します。 このハッシュは、 配列の最終要素である必要があることに注意してください。

client[:bands].indexes.create_many([
{ key: { genre: 1 } },
{ key: { name: 1 }, unique: true, expire_after: 120 },
{ commit_quorum: 'majority' },
])

インデックスを削除するには、 indexes#drop_oneまたはindexes#drop_allを呼び出します。

# Drops the name_1 index.
client[:bands].indexes.drop_one( 'name_1' )
# Drops all indexes in the collection.
client[:bands].indexes.drop_all

インデックスを一覧表示するには、 indexesオブジェクトを反復処理します。

client[:bands].indexes.each do |index_spec|
p index_spec
# {"v"=>2, "key"=>{"_id"=>1}, "name"=>"_id_"}
# {"v"=>2, "key"=>{"genre"=>1}, "name"=>"genre_1"}
# {"v"=>2, "unique"=>true, "key"=>{"name"=>1}, "name"=>"name_1",
# "expireAfterSeconds"=>120}
end

各反復では、 listIndexesコマンドによって返されたインデックス仕様が返されます。

注意

このメソッドによって返されるインデックス仕様の形状と内容は、MongoDB のバージョンによって異なる場合があります。

戻る

コレクション