인덱싱
드라이버는 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={}>
인덱스 생성
인덱스는 한 번에 하나씩 생성하거나 단일 작업으로 여러 개를 생성할 수 있습니다. MongoDB 3.0 이상에서 여러 인덱스를 생성하는 경우, 인덱스는 병렬로 생성됩니다. 이전 버전에서는 순차적으로 생성됩니다.
단일 인덱스를 만들려면 indexes#create_one
을 사용하고 키 사양을 첫 번째 인수로, 옵션을 두 번째 인수로 전달합니다.
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 | collection의 문서가 만료되는 데 걸리는 시간(초)입니다. |
:name | 인덱스의 이름입니다. |
:sparse | 인덱스를 희소(sparse)해야 하는지 여부( true 또는 false 입니다. |
:storage_engine | 이 특정 인덱스에 대한 storage engine의 이름입니다. |
:version | 사용할 인덱스 형식 버전입니다. |
:default_language | 텍스트 인덱스의 기본 언어입니다. |
:language_override | 기본 언어를 재정의할 때 사용할 필드 이름입니다. |
:text_version | 텍스트 인덱스 저장을 위한 버전 형식입니다. |
:weights | 텍스트 검색에서 필드와 가중치를 지정하는 문서입니다. |
:sphere_version | 2D 구 인덱스 버전입니다. |
:bits | 2D 인덱스에서 위도 및 경도의 최대 경계를 설정합니다. |
:max | 2D 인덱스에서 위도 및 경도의 최대 경계입니다. |
:min | 2D 인덱스에서 위도 및 경도의 최소 경계입니다. |
:bucket_size | geo haystack 인덱스에서 위치 값을 그룹화할 단위 수입니다. |
:partial_filter_expression | 부분 인덱스에 대한 필터입니다. |
:hidden | 인덱스를 숨길지 여부를 지정하는 부울입니다. 숨겨진 인덱스는 collection에 존재하지만 쿼리 플래너에서 사용되지 않는 인덱스입니다. |
:commit_쿼럼 옵션
MongoDB Server 버전 4.4 이상에서는 인덱스 생성 시 :commit_quorum
옵션을 지정할 수 있습니다. 이 옵션은 개별 인덱스의 동작을 결정하는 것이 아니라 인덱스 생성 시 서버 동작을 결정한다는 점에서 다른 인덱스 옵션과 다릅니다.
:commit_quorum
옵션은 인덱스가 준비되기 전에 인덱스 빌드를 완료해야 하는 복제본 세트의 데이터 보유 투표 멤버 수를 지정합니다. 가능한 값은 정수(0 ~ 투표권이 있는 멤버 수, 복제본 세트의 데이터를 보유하는 멤버 수), "majority" 또는 "votingMembers"입니다.
인덱스 하나를 만들 때 :commit_quorum
를 지정하려면 indexes#create_one
메서드의 두 번째 인수에 다른 옵션을 추가합니다.
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 버전에 따라 변경될 수 있습니다.