インデックスの作成
このドライバーでは、 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 | インデックスを 非表示 にするかどうかを指定するブール値。非表示インデックス とは、コレクションに存在してもクエリ プランナーによって使用されることのないインデックスです。 |
:commit_uorum オプション
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 のバージョンによって異なる場合があります。