Docs Menu
Docs Home
/ / /
Ruby MongoDB Driver
/

인덱싱

이 페이지의 내용

  • 인덱스 생성
  • 인덱스 삭제
  • 인덱스 나열

드라이버는 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에 존재하지만 쿼리 플래너에서 사용되지 않는 인덱스입니다.

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 버전에 따라 변경될 수 있습니다.

돌아가기

컬렉션