AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

필드 동작 사용자 지정

이 가이드 에서는 Mongoid 모델의 필드 동작을 사용자 지정하는 방법을 학습 수 있습니다.

default 옵션을 사용하여 필드가 기본값 을 갖도록 구성할 수 있습니다. 기본 필드 값은 고정 또는 Proc 값일 수 있습니다.

다음 예시 state 필드 에 고정된 기본값 을 지정합니다.

class Order
include Mongoid::Document
field :state, type: String, default: 'created'
end

다음 예시 fulfill_by 필드 에 Proc 기본값 을 지정합니다.

class Order
include Mongoid::Document
field :fulfill_by, type: Time, default: ->{ Time.now + 3.days }
end

참고

운전자 클래스가 로드될 때 인스턴스가 아닌 기본값 을 Proc 평가합니다. 운전자 Proc 문서 인스턴스화될 때 값을 평가합니다. 다음 기본값 필드 값은 동일한 결과를 생성하지 않습니다.

# Time.now is set to the time the class is loaded
field :submitted_at, type: Time, default: Time.now
# Time.now is set to the time the document is instantiated
field :submitted_at, type: Time, default: ->{ Time.now }

Proc 인스턴스 에서 self 키워드를 사용하여 문서 상태 에 따라 달라지는 기본값 을 설정하다 수 있습니다. 다음 예시 submitted_at 필드 의 상태 에 따라 fulfill_by 기본값 을 설정합니다.

field :fulfill_by, type: Time, default: ->{
self.submitted_at + 4.hours
}

기본값 으로 Mongoid는 다른 모든 속성을 설정하고 초기화한 후 Proc 기본값 을 적용합니다. 다른 속성을 설정하기 전에 기본값 적용 하려면 다음 예시 와 같이 pre_processed 옵션을 true로 설정하다 .

field :fulfill_by, type: Time, default: ->{ Time.now + 3.days },
pre_processed: true

팁

_id 필드 에 기본값 Proc 값을 설정하다 하려면 항상 pre-processed 옵션을 true 로 설정하다 .

애플리케이션 에서 원래 이름으로 필드 참조하면서 데이터베이스 에 저장 별도의 필드 이름을 지정할 수 있습니다. MongoDB 모든 문서 와 함께 모든 필드 정보를 저장하기 때문에 저장 공간을 절약할 수 있습니다.

as: 키워드를 사용하여 대체 저장 이름을 설정하다 수 있습니다. 다음 예시 Mongoid가 데이터베이스 에 n(으)로 저장하는 name(이)라는 필드 생성합니다.

class Band
include Mongoid::Document
field :n, as: :name, type: String
end

Mongoid는 name 필드 "n"(으)로 저장하지만 애플리케이션 에서 name(으)로 필드 계속 액세스 할 수 있습니다.

alias_attribute 옵션을 사용하여 필드 의 별칭을 만들 수 있습니다. 별칭을 지정해도 Mongoid가 데이터베이스 에 필드 저장하는 방법은 변경되지 않지만, 애플리케이션 에서 다른 이름으로 필드 액세스 할 수 있습니다.

다음 예시 name 필드 의 별칭을 지정합니다.

class Band
include Mongoid::Document
field :name, type: String
alias_attribute :n, :name
end

필드 별칭을 제거 하려면 unalias_attribute 옵션을 사용할 수 있습니다. 다음 예시 name 필드 의 별칭을 제거합니다.

class Band
unalias_attribute :n
end

unalias_attribute 를 사용하여 _id 필드 에서 사전 정의된 id 별칭을 제거 수도 있습니다. 이를 사용하여 _id 필드 와 id 필드 에 서로 다른 값을 저장 수 있습니다.

기본값 으로 Mongoid를 사용하면 모델의 필드를 재정의할 수 있습니다. 필드 재정의할 때 오류를 발생시키려면 mongoid.yml 파일 에서 duplicate_fields_exception 구성 옵션을 true로 설정하다 .

duplicate_fields_exception 옵션이 true로 설정하다 경우에도 필드 정의할 때 overwrite 옵션을 true 로 설정하여 특정 필드 재정의할 수 있습니다. 다음 예시 name 필드 정의한 다음 overwrite 옵션을 사용하여 필드 재정의합니다.

class Person
include Mongoid::Document
field :name
field :name, type: String, overwrite: true
end

기본값 으로 Mongoid는 Mongoid가 자동으로 생성하는 BSON::ObjectId 값을 포함하도록 문서의 _id 필드 정의합니다. 유형을 사용자 지정하거나 모델에 지정하여 _id 필드 의 기본값 을 지정할 수 있습니다.

다음 예시 사용자 지정 _id 필드 있는 Band 클래스를 만듭니다.

class Band
include Mongoid::Document
field :name, type: String
field :_id, type: String, default: ->{ name }
end

_id 필드 의 기본값 을 생략할 수 있습니다. 필드 에 기본값 을 지정하지 않으면 Mongoid는 _id 값 없이 문서 를 유지합니다. 최상위 문서의 경우 MongoDB 서버 _id 값을 자동으로 할당합니다. 그러나 내장된 문서의 경우 서버 _id 값을 할당하지 않습니다.

_id 필드 에 값을 지정하지 않으면 Mongoid는 서버 에서 자동으로 할당된 값을 조회 하지 않습니다. 이로 인해 _id 값을 사용하여 데이터베이스 에서 문서 조회 할 수 없습니다.

지정된 필드 유형으로 변환할 수 없는 값은 캐스팅할 수 없는 것으로 간주됩니다. 예시 를 들어 배열 Integer 필드 에 할당될 때 캐스팅할 수 없는 것으로 간주됩니다.

v8.0 이상에서 Mongoid는 캐스팅할 수 없는 값에 nil 를 할당합니다. 캐스팅할 수 없는 원래 값은 필드 이름과 함께 attributes_before_type_cast 해시에 저장됩니다.

필드 와 동일한 이름의 메서드를 지정하고 read_attribute 또는 write_attribute 메서드를 호출하여 원시 속성 값에 대해 작업을 수행하여 필드 의 기본값 getter 및 setter 메서드를 재정의할 수 있습니다.

다음 예시 Person 클래스의 name 필드 에 대한 사용자 지정 getter 및 setter를 만듭니다.

class Person
include Mongoid::Document
field :name, type: String
# Custom getter for 'name' to return the name in uppercase
def name
read_attribute(:name).upcase if read_attribute(:name)
end
# Custom setter for 'name' to store the name in lowercase
def name=(value)
write_attribute(:name, value.downcase)
end
end

attr_readonly 옵션을 지정하여 필드 읽기 전용으로 지정할 수 있습니다. 이렇게 하면 속성이 있는 문서를 만들 수 있지만 업데이트 는 없습니다.

다음 예시 Band 클래스를 만들고 name 필드 읽기 전용으로 지정합니다.

class Band
include Mongoid::Document
field :name, type: String
field :origin, type: String
attr_readonly :name
end

update_attributes와(과) 같은 대량 업데이트 메서드를 호출하고 읽기 전용 필드 전달하면 Mongoid는 읽기 전용 필드 무시하고 다른 필드를 모두 업데이트합니다. 읽기 전용 필드 명시적으로 업데이트 하려고 하면 Mongoid가 ReadonlyAttribute 예외를 발생시킵니다.

참고

bit 및 inc와 같은 원자성 지속성 연산자에 대한 호출은 읽기 전용 필드 에 대한 변경 사항을 계속 유지합니다.

전체 모델을 읽기 전용으로 지정하는 방법에 대한 학습 데이터 작업 수행 가이드 의 읽기 전용 문서 섹션을 참조하세요.

Mongoid는 i18n gem을 사용하여 현지화된 필드를 지원합니다. 필드 현지화하면 Mongoid가 해당 필드 국가 및 언어 설정 설정 키 및 값의 해시로 저장합니다. 필드에 액세스하는 것은 문자열 값과 동일한 방식으로 작동합니다. 모든 필드 유형의 필드를 현지화할 수 있습니다.

다음 예시 현지화된 review 필드 있는 Product 클래스를 만듭니다.

class Product
include Mongoid::Document
field :review, type: String, localize: true
end
I18n.default_locale = :en
product = Product.new
product.review = "Marvelous!"
I18n.locale = :de
product.review = "Fantastisch!"
product.attributes
# Outputs: { "review" => { "en" => "Marvelous!", "de" => "Fantastisch!" }

_translations 메서드를 호출하여 모든 번역을 한 번에 가져오고 설정하다 수 있습니다.

product.review_translations
# Outputs: { "en" => "Marvelous!", "de" => "Fantastisch!" }
product.review_translations =
{ "en" => "Marvelous!", "de" => "Wunderbar!" }

i18n 폴백 기능 활성화하여 현지화된 필드에 대한 폴백을 지정할 수 있습니다.

사용자 환경에서 config.i18n.fallbacks 구성 설정과 폴백 언어를 설정하여 Rails 애플리케이션 에서 폴백을 활성화합니다.

config.i18n.fallbacks = true
config.after_initialize do
I18n.fallbacks[:de] = [ :en, :es ]
end

모듈을 i18n 백엔드 에 포함하고 폴백 언어를 설정하여 Rails가 아닌 애플리케이션에서 폴백을 활성화합니다.

require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
I18n.fallbacks[:de] = [ :en, :es ]

대체를 활성화한 후 활성 언어 번역이 없는 경우 지정된 대체 언어 로 조회됩니다.

필드 정의할 때 fallbacks 옵션을 false로 설정하여 지정된 필드 에 대한 대체 언어를 비활성화할 수 있습니다.

class Product
include Mongoid::Document
field :review, type: String, localize: true, fallbacks: false
end

현지화된 필드를 쿼리할 때 Mongoid는 현재 국가 및 언어 설정 과 일치하도록 쿼리 기준을 자동으로 변경합니다. 다음 예시 Product 클래스에 en 국가 및 언어 설정 의 검토 쿼리합니다.

# Match all products with Marvelous as the review. The current locale is :en.
Product.where(review: "Marvelous!")
# The resulting MongoDB query filter: { "review.en" : "Marvelous!" }

참고

현지화된 필드에 대해 광범위하게 쿼리 하려는 경우 쿼리 하려는 각 국가 및 언어 설정 인덱싱 것이 좋습니다.