Docs Menu
Docs Home
/ / /
몽고이드
/

인덱스 관리

이 페이지의 내용

  • 인덱스 지정
  • MongoDB Atlas 에서 검색 인덱스 지정
  • 인덱스 관리 레이크 작업
  • MongoDB Atlas에서 Atlas Search 인덱스 관리하기
  • Mongoid에 모델을 찾을 수 있는 위치 알려주기
  • Rails가 아닌 애플리케이션에서 Rake 작업 사용

인덱스 매크로를 사용하여 문서에 인덱스를 정의할 수 있습니다. 방향과 함께 인덱스 의 키를 제공합니다. 두 번째 옵션 해시 매개변수에 추가 옵션을 제공할 수 있습니다.

class Person
include Mongoid::Document
field :ssn
index({ ssn: 1 }, { unique: true, name: "ssn_index" })
end

내장된 문서 필드에 인덱스를 정의할 수도 있습니다.

class Person
include Mongoid::Document
embeds_many :addresses
index "addresses.street" => 1
end

여러 필드를 인덱싱하고 방향을 제공할 수 있습니다.

class Person
include Mongoid::Document
field :first_name
field :last_name
index({ first_name: 1, last_name: 1 }, { unique: true })
end

인덱스는 희소(sparse)할 수 있습니다.

class Person
include Mongoid::Document
field :ssn
index({ ssn: -1 }, { sparse: true })
end

지리 공간적 인덱스의 경우 인덱싱되는 필드 가 배열 유형인지 확인합니다.

class Person
include Mongoid::Document
field :location, type: Array
index({ location: "2d" }, { min: -200, max: 200 })
end

인덱스의 범위를 특정 데이터베이스로 지정할 수 있습니다.

class Person
include Mongoid::Document
field :ssn
index({ ssn: 1 }, { database: "users", unique: true, background: true })
end

인덱스 정의에 별칭이 지정된 필드 이름을 사용할 수 있습니다. 필드 별칭은 partial_filter_expression, weights, wildcard_projection 옵션에서도 확인됩니다.

class Person
include Mongoid::Document
field :a, as: :age
index({ age: 1 }, { partial_filter_expression: { age: { '$gte' => 20 } })
end

참고

partial_filter_expression 와 같은 인덱스 옵션에서 필드 이름 별칭 확장 은 MongoDB 서버 6.0 의 동작에 따라 수행됩니다. 향후 서버 버전에서는 이러한 옵션을 해석하는 방식이 변경될 수 있으며, Mongoid의 기능은 이러한 변경 사항을 지원 하지 않을 수 있습니다.

Mongoid는 연관 관계를 위한 "외래 키" 필드에 인덱스를 정의할 수 있습니다. 이는 외래 키가 저장된 연결 매크로에서만 작동합니다.

class Comment
include Mongoid::Document
belongs_to :post, index: true
has_and_belongs_to_many :preferences, index: true
end

더 이상 사용되지 않음: MongoDB 4.0 및 이전 버전에서는 사용자가 background 옵션을 사용하여 전경(차단) 또는 배경 (비차단, 하지만 효율성이 떨어짐)에서 인덱스를 빌드 할지 여부를 제어할 수 있었습니다.

class Person
include Mongoid::Document
field :ssn
index({ ssn: 1 }, { unique: true, background: true })
end

기본값 background 은 Mongoid의 background_indexing 구성 옵션에 의해 제어됩니다.

background 옵션은 MongoDB 4.2부터 적용되지 않습니다.

애플리케이션 이 MongoDB Atlas 에 연결된 경우 모델에서 검색 인덱스를 선언하고 관리 할 수 있습니다. (이 기능 은 MongoDB Atlas 에서만 사용할 수 있습니다.)

검색 인덱스 를 선언하려면 모델에서 search_index 매크로를 사용합니다.

class Message
include Mongoid::Document
search_index { ... }
search_index :named_index, { ... }
end

검색 인덱스에는 명시적인 이름을 지정할 수 있습니다. 이는 모델에 검색 인덱스 가 두 개 이상 있는 경우 필요합니다.

데이터베이스 에 인덱스를 생성하려는 경우 제공된 db:mongoid:create_indexes Rake 작업 을 사용합니다.

$ rake db:mongoid:create_indexes

Mongoid는 모든 세컨더리 인덱스를 삭제 하는 Rake 작업 도 제공합니다.

$ rake db:mongoid:remove_indexes

참고: 이러한 Rake 작업의 출력은 Rails에서 구성한 기본값 로거로 이동합니다. 이는 일반적으로 표준 출력이 아닌 log/development.log 와 같은 파일 입니다.

이러한 인덱스 생성/제거 명령은 Rails 콘솔에서 실행하면 하나의 모델에서만 작동합니다.

# Create indexes for Model
Model.create_indexes
# Remove indexes for Model
Model.remove_indexes

모델에 Atlas Search 인덱스를 정의한 경우 해당 Atlas Search 인덱스를 생성하고 제거하는 데 사용할 수 있는 레이크 작업이 있습니다.

$ rake db:mongoid:create_search_indexes
$ rake db:mongoid:remove_search_indexes

기본적으로 Atlas Search 인덱스를 만들려면 인덱스가 생성될 때까지 대기하며, 이 작업에는 시간이 꽤 걸릴 수 있습니다. 데이터베이스가 백그라운드에서 인덱스를 생성하도록 하려면 다음과 같이 WAIT_FOR_SEARCH_INDEXES 환경 변수를 0 로 설정할 수 있습니다.

$ rake WAIT_FOR_SEARCH_INDEXES=0 db:mongoid:create_search_indexes

Atlas Search 인덱스 제거 작업은 모든 모델에서 모든 Atlas Search 인덱스를 제거하므로 주의해서 사용해야 합니다.

Rails 콘솔에서 다음을 호출하여 단일 모델에 대한 Atlas Search 인덱스를 추가하고 제거할 수도 있습니다.

# Create all defined search indexes on the model; this will return
# immediately and the indexes will be created in the background.
Model.create_search_indexes
# Remove all search indexes from the model
Model.remove_search_indexes
# Enumerate all search indexes on the model
Model.search_indexes.each { |index| ... }

Rails가 아닌 애플리케이션의 경우 Mongoid의 레이크 작업은 ./app/models./lib/models 에서 모델을 찾습니다. Rails의 경우 Mongoid는 ./app/models (또는 모델을 찾도록 Rails를 구성한 모든 곳)에서 찾습니다. 모델이 다른 위치 에 있는 경우 Mongoid.model_paths= 를 사용하여 모델을 찾을 위치를 Mongoid에 알려야 합니다. 애플리케이션의 Rakefile에서 다음과 같이 설정하면 됩니다.

# Rakefile
# keep the defaults, but add more paths to look for models
Mongoid.model_paths += [ "./src/models", "./lib/documents" ]
# or, override the defaults entirely
Mongoid.model_paths = [ "./src/models", "./lib/documents" ]

이러한 경로가 애플리케이션의 로드 경로에도 있는지 확인하세요. 예를 예시 다음과 같습니다.

# Rakefile
$LOAD_PATHS.concat [ "./src/models", "./lib/documents" ]

Mongoid의 Rake 작업은 Mongoid를 사용하여 Rails 애플리케이션에 자동으로 로드됩니다. Rails가 아닌 애플리케이션 에서 Mongoid를 사용하는 경우 이러한 작업은 수동으로 로드해야 합니다.

# Rakefile
require 'mongoid'
load 'mongoid/tasks/database.rake'

애플리케이션에서 번들러를 사용하는 경우 명시적으로 mongoid 를 요구하는 대신 bundler/setup 을(를) 요구할 수 있습니다.

# Rakefile
require 'bundler/setup'
load 'mongoid/tasks/database.rake'

돌아가기

collection 구성