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

릴리스 노트

다음 버전의 새로운 기능에 대해 알아보세요:

릴리스 목록 및 자세한 출시하다 노트를 보려면 Github 의 Mongoid 릴리스 를 참조하세요.

9.1 출시하다 에는 다음과 같은 새로운 기능, 개선 사항 및 수정 사항이 포함되어 있습니다.

  • 결과를 원시 해시로 조회 할 수 있는 Criteria#raw 메서드를 추가합니다. 자세한 학습 은 쿼리 결과 수정 가이드 의 원시 데이터 반환 섹션을 참조하세요.

  • cache_version 이(가) nil이 아닌 값을 반환할 때 타임스탬프를 포함하지 않도록 cache_key 의 동작을 수정하여 캐싱 기능을 개선합니다. 대신 키 변동을 줄이기 위해 타임스탬프가 항목의 버전으로 사용됩니다.

    이 변경 사항은 또한 Mongoid::Document 모듈에 cache_version 메서드를 추가합니다. 이 버전에 도입된 캐시 키 형식으로 인해 애플리케이션 에 문제가 발생하는 경우 cache_version 메서드를 nil로 정의하여 원래 형식으로 되돌릴 수 있습니다.

    module Mongoid
    module Document
    def cache_version = nil
    end
    end
  • Mongoid::Config.serializable_hash_with_legacy_only 옵션(기본값은 true)을 포함하도록 serializable_hash 메서드를 업데이트합니다. 이 옵션을 활성화하면 Ruby 드라이버 기존의 레거시 serializable_hash 동작을 사용합니다. 이 동작은 :only 옵션에 대해 빈 배열 전달할 때 모든 키를 반환합니다. Mongoid는 v10.0에서 이 레거시 동작을 더 이상 사용하지 않습니다.

  • 동시 작업에 대한 기본값 격리 수준을 구성할 수 있는 Mongoid.isolation_level 속성 을 추가합니다. 기본값 격리 수준은 :rails이며, 이는 ActiveSupport::IsolatedExecutionState에서 격리 수준을 상속합니다. 기존 스레드 로컬 격리 수준 기능에 대한 :thread 옵션을 지정하거나 상위 파이버에서 내부 상태 상속하는 :fiber 옵션을 지정할 수도 있습니다.

  • any?, one?many? 열거 가능 메서드를 Criteria 클래스에 추가하고 클래스 수준의 scoped 에 위임합니다. 이러한 메서드는 문서를 메모리에 로드하는 대신 MongoDB count 함수를 사용하므로 문서를 아직 가져오지 않았을 때 성능이 향상됩니다. 다음 예시 이러한 메서드를 사용하는 방법을 보여 줍니다.

    User.any? # Returns true if any user documents exist
    User.one? # Returns true if exactly one user document exists in the criteria
    User.many? # Returns true if more than one user document exists in the criteria
  • 쿼리 의 MongoDB 쿼리 언어(MQL ) 표현을 반환하는 Criteria#to_mql 메서드를 추가합니다. 이 메서드를 사용하여 Mongoid가 생성하는 쿼리를 검사할 수 있습니다. 다음 예시 Person 쿼리 에 대한 MQL 반환합니다.

    Person.where(age: { '$gt' => 18 }).to_mql
  • 집계 파이프라인 사용하여 연결을 로드하기 위한 Criteria#eager_load 메서드를 추가합니다. includes와(과) 달리 eager_load 는 데이터베이스 에 단일 쿼리 실행합니다. 이 메서드는 has_manyhas_and_belongs_to_many 연결과 여러 belongs_to 또는 has_one 연결을 조인하는 쿼리에서 더 나은 성능을 발휘합니다. 포함된 연관 관계에 eager_load 를 사용하는 경우, Mongoid는 includes로 대체됩니다. 다음 예시 활동적인 사람에 대해 employerpartner 연결을 긴급 로드합니다.

    Person.where(active: true).eager_load(:employer, :partner)
  • MongoDB 벡터 검색 지원 추가합니다. vector_field 매크로 또는 vector_search_index 메서드를 사용하여 MongoDB 벡터 검색 인덱스 정의한 다음 vector_search 를 호출하여 의미적으로 유사한 document를 쿼리 . 자세한 학습 은 MongoDB 벡터 검색 개요를 참조하세요. 다음 예시 Article model에 MongoDB 벡터 검색 인덱스 정의하고 유사한 document를 쿼리합니다.

    class Article
    include Mongoid::Document
    vector_field :embedding, dimensions: 1536
    end
    articles = Article.vector_search(query_vector, limit: 5)
  • MongoDB 벡터 검색 지원 에 자동 임베딩을 활성화하는 auto_embed_field 매크로를 추가합니다. Mongoid는 구성된 임베딩 모델을 사용하여 필드 를 자동으로 인덱스 . 자세한 학습 은 MongoDB 벡터 검색 문서에서 MongoDB 벡터 검색 빠른 시작 을 참조하세요. 다음 예시 유사한 아티클에 대한 자동 임베딩 필드 와 쿼리를 정의합니다.

    class Article
    include Mongoid::Document
    auto_embed_field :body
    end
    articles = Article.auto_embed_search('machine learning', limit: 5)
  • embeds_one, has_onebelongs_to 연결에서 build_<association> 또는 create_<association> 를 호출할 때 연결된 document 유형을 지정하기 위한 지원 추가합니다. 다음 예시 Job 연관 관계에 대해 HeadlessRunner 를 빌드합니다.

    job = Job.create
    job.build_runner({ name: 'My Runner' }, HeadlessRunner)
  • Mongoid.allow_short_circuit_queries 구성 옵션을 추가합니다. true로 설정하다 하면 빈 배열 있는 최상위 $in 조건이 데이터베이스 쿼리하지 않고 빈 결과를 반환합니다. 이 옵션의 기본값은 false입니다. 다음 예시 이 옵션을 활성화합니다.

    Mongoid.allow_short_circuit_queries = true
    Document.in(ids: []) # Returns [], no database query issued
  • 중복 인덱스 선언 동작을 업데이트합니다. Mongoid는 이제 인덱스 이름을 포함하여 옵션만 다른 인덱스 선언을 무시합니다. 거의 동일한 인덱스 선언을 서버 로 전송하려면 Mongoid.allow_duplicate_index_declarations = true을(를) 설정하다 .

  • Criteria#max_scan 메서드를 더 이상 사용하지 않습니다.

  • 기본값 Mongoid::Config.allow_reparenting_via_nested_attributesfalse로 변경합니다. 이전 동작을 복원 하려면 이 옵션을 true 로 설정합니다. 이 옵션은 Mongoid v10에서 제거될 예정입니다.

  • 기본값 Mongoid.autosave_saves_unchanged_documentsfalse로 변경합니다. 이전 동작을 복원 하려면 이 옵션을 true 로 설정합니다. 이 옵션은 Mongoid v10에서 제거될 예정입니다.

9.0.11 출시하다 다음과 같은 새로운 기능이 포함되어 있습니다.

Mongoid v9.0.11 Mongoid::Config.allow_reparenting_via_nested_attributes 구성 옵션을 도입합니다. 이 옵션은 중첩된 속성을 통해 종속 has_many 레코드의 부모를 다시 지정할 수 있는지 여부를 제어합니다.

이 옵션의 기본값은 true이며, 레거시 동작을 유지합니다. 중첩된 속성을 통한 부모 재지정을 방지하려면 이 옵션을 false로 설정하다 .

Mongoid::Config.allow_reparenting_via_nested_attributes = false

Mongoid v9.1에서는 이 옵션의 기본값 false입니다. 이 옵션은 Mongoid v10에서 제거될 예정입니다.

Mongoid v9.0.11 Mongoid.autosave_saves_unchanged_documents 구성 옵션을 도입합니다. 이 옵션은 하위 트리의 document 에 autosave: true가 있는 경우 Mongoid가 연결 하위 트리의 모든 document를 자동으로 저장할지 여부를 제어합니다.

이전 Mongoid 버전에서는 autosave: true 와의 연결로 인해 Mongoid가 모든 하위 문서에서 #save 를 호출하고 해당 문서의 변경 여부에 관계없이 모든 해당 after_save 후크를 재귀적으로 호출했습니다.

이 옵션의 기본값은 true이며, 레거시 동작을 유지합니다. 변경된 문서가 포함된 하위 트리만 자동으로 저장하려면 이 옵션을 false로 설정하다 .

Mongoid.autosave_saves_unchanged_documents = false

Mongoid v9.1에서는 이 옵션의 기본값 false입니다. 이 옵션은 Mongoid v10에서 제거될 예정입니다.

Mongoid v9.0.11 Ruby 4.0에 대한 공식 지원 추가합니다.

경고

호환성이 손상되는 변경

9.0.7 출시하다 호환성이 손상되는 변경이 포함되어 있습니다.

9.0.7 출시하다 다음과 같은 변경 사항이 포함됩니다.

  • 이전 Mongoid 버전에서는 자식이 변경되지 않은 경우 부모 상태 에 의존하는 자식 콜백이 더 이상 호출되지 않는 버그가 수정되었습니다. 수정 사항으로 인해 성능이 저하되었으므로 이 패치 버전은 이전 기능을 복원합니다. 이제 하위 콜백은 하위 자체가 변경된 경우에만 호출됩니다. 이렇게 하면 수정되지 않은 하위 항목에서 호출되는 콜백에 의존하는 앱에 호환성이 손상되는 변경이 도입됩니다( 예시: 하위 콜백 상태 변경한 상위 항목에 의존하는 경우).

    다음 코드 샘플 상위 변경 사항에 대한 응답으로 하위 콜백을 호출하는 방법을 보여줍니다.

    class Parent
    include Mongoid::Document
    has_many :children
    after_save { children.each(&:parent_changed_callback) }
    end
    class Child
    include Mongoid::Document
    belongs_to :parent
    def parent_changed_callback
    # ...
    end
    end

9.0 출시하다 에는 다음과 같은 새로운 기능, 개선 사항 및 수정 사항이 포함되어 있습니다.

Mongoid v9.0의 출시하다 와 함께, Rails 애플리케이션을 생성, 업데이트, 관리 및 유지 관리하기 위한 명령줄 유틸리티인 railsmdb가 정식 출시되었습니다.

railsmdb 을(를) 사용하면 Ruby on Rails 개발자에게 이미 친숙한 공통 생성기를 통해 명령줄 에서 MongoDB 로 더 쉽게 작업할 수 있습니다.

예를 예시 railsmdb 를 사용하여 새 Mongoid 모델에 대한 스텁을 생성할 수 있습니다.

bin/railsmdb generate model person

이렇게 하면 app/models/person.rb 에 새 모델이 생성됩니다.

class Person
include Mongoid::Document
include Mongoid::Timestamp
end

모델의 필드를 지정할 수 있습니다.

bin/railsmdb generate model person name:string birth:date
class Person
include Mongoid::Document
include Mongoid::Timestamp
field :name, type: String
field :birth, type: Date
end

--parent 옵션을 전달하여 생성기에 새 모델을 다른 모델의 하위 클래스로 만들도록 지시할 수 있습니다.

bin/railsmdb generate model student --parent=person
class Student < Person
include Mongoid::Timestamp
end

모델 이름에서 유추할 수 있는 것과 다른 컬렉션 에 모델을 저장 해야 하는 경우 --collection를 지정할 수 있습니다.

bin/railsmdb generate model course --collection=classes
class Course
include Mongoid::Document
include Mongoid::Timestamp
store_in collection: 'classes'
end

자세한 내용은 Github 의 mongoid-railsmdb 리포지토리 참조하세요.

Mongoid v9.0 Ruby 2.7 이상 또는 JRuby 9.4이 필요합니다. 이전 Ruby 및 JRuby 버전은 지원되지 않습니다.

Mongoid v9.0 Rails 6.0 이상이 필요합니다. 이전 Rails 버전은 지원되지 않습니다.

더 이상 사용되지 않는 클래스 Mongoid::Errors::InvalidStorageParent 이(가) 제거되었습니다.

Mongoid v8.x 이전 버전에서는 사용자가 내장된 문서에 대한 around_* 콜백을 정의할 수 있습니다. v9.0부터는 기본값 으로 이러한 콜백이 무시되며 실행되지 않습니다. 이러한 콜백이 정의되어 있으면 콘솔에 경고가 출력됩니다.

이전 동작을 복원 하려면 애플리케이션 에서 Mongoid.around_callbacks_for_embedstrue 로 설정하다 수 있습니다.

참고

내장된 문서에 around_* 콜백을 활성화하는 것은 문서 에 내장된 문서가 많은 경우 SystemStackError 예외가 발생할 수 있으므로 권장하지 않습니다. 자세한 내용은 MONGOID- 를5658 참조하세요.

for_js 메서드는 더 이상 사용되지 않으며 Mongoid v10.0에서 제거될 예정입니다.

단절적 변경: Mongoid v 에서 다음 구성 옵션이 제거되었습니다.9.0 앱 에서 이에 대한 참조를 모두 제거했는지 확인하세요. 업그레이드하기 전에 config.load_defaults 8.1 를 사용하고 있었다면 동작이 변경되지 않습니다. 각 옵션의 의미는 이전 출시하다 노트를 참조하세요.

  • :use_activesupport_time_zone

  • :broken_aggregables

  • :broken_alias_handling

  • :broken_and

  • :broken_scoping

  • :broken_updates

  • :compare_time_by_ms

  • :legacy_attributes

  • :legacy_pluck_distinct

  • :legacy_triple_equals

  • :object_id_as_json_oid

  • :overwrite_chained_operators

또한 config.load_defaults 버전 v7.5 및 이전 버전에 대한 지원 중단되었습니다(최소 버전 v8.0을 사용해야 함).

단절적 변경: 이제 사용 중단된 다음 기능이 제거되었습니다.

  • Mongoid::QueryCache 모듈이 제거되었습니다. 1-for-1 의 모든 사용법을 Mongo::QueryCache(으)로 바꾸세요. Mongoid::QueryCache#clear_cache 메서드는 Mongo::QueryCache#clear로 대체되어야 합니다. 다른 모든 메서드와 하위 모듈은 이름이 동일합니다.

  • Object#blank_criteria? 메서드가 제거되었습니다(이전에는 더 이상 사용되지 않음).

  • Document#as_json :compact 옵션이 제거됩니다. 대신 반환된 Hash 객체 에서 `#compact 를 호출하세요.

  • 더 이상 사용되지 않는 클래스 Mongoid::Errors::InvalidStorageParent 이(가) 제거되었습니다.

버전 9 의 새로운 기능입니다.0.3.:

Mongoid::Threaded.getMongoid::Threaded를 사용할 수 있습니다. 설정하다 메서드를 사용하여 스레드 로컬 변수를 쿼리 하고 수정합니다. 이러한 메서드를 사용해야 하는 경우를 학습 콜백 가이드 의 스레드-로컬 변수 섹션을 참조하세요.

버전 9 의 새로운 기능입니다.0.7.:

Mongoid.allow_duplicate_index_declarations 구성 옵션을 사용하여 서버 에 인덱스 확인을 보낼 수 있습니다. 중복 인덱스 선언되면 서버 오류가 발생합니다. 자세히 학습하려면 애플리케이션 구성 가이드의 구성 옵션 섹션을 참조하세요.

Mongoid v8.x 이전 버전에서는 touch 메서드가 모델을 변경된 상태 로 유지합니다.

# v8.x behaviour
band = Band.create!
band.touch
band.changed? # => true
band.changes
# => {"updated_at"=>[2023-01-30 13:12:57.477191135 UTC, 2023-01-30 13:13:11.482975646 UTC]}

v9.0부터 Mongoid는 이제 touch 메서드 사용 후 변경된 상태 올바르게 지웁니다.

# v9.0 behavior
band = Band.create!
band.touch
band.changed? # => false
band.changes # => {}

Mongoid는 이제 Rails 콘솔 샌드박스 모드 지원합니다. Rails 콘솔이 --sandbox 플래그로 시작된 경우 Mongoid는 콘솔을 열기 전에 :default 클라이언트 에서 트랜잭션 시작합니다. 이 트랜잭션 커밋되지 않습니다. 따라서 :default 클라이언트 사용하여 콘솔에서 실행된 모든 명령은 데이터베이스 에 유지되지 않습니다.

참고

default 이외의 다른 클라이언트를 사용하여 샌드박스 모드에서 명령을 실행하는 경우 이러한 변경 사항은 평소대로 유지됩니다.

Mongoid 9.0 은 Active Record에서 영감을 받은 새로운 트랜잭션 API 도입합니다.

Band.transaction do
Band.create(title: 'Led Zeppelin')
end
band = Band.create(title: 'Deep Purple')
band.transaction do
band.active = false
band.save!
end

자세한 학습 은 트랜잭션 및 세션 가이드 참조하세요.

Mongoid v8.x 이전 버전에서는 사용자가 내장된 문서 에 대한 지속성 컨텍스트를 지정할 수 있습니다(store_in 매크로 사용). Mongoid v9.0 에서 내장된 문서의 경우 이러한 설정이 무시됩니다. 이제 내장된 문서 항상 상위 문서의 지속성 컨텍스트를 사용합니다.

이제 쿼리를 수행할 때 Mongoid::RawValue 래퍼 클래스를 사용하여 Mongoid의 유형 강제 변환 로직을 건너뛸 수 있습니다. 이는 데이터베이스 의 레거시 데이터가 필드 정의와 다른 유형일 때 유용할 수 있습니다.

class Person
include Mongoid::Document
field :age, type: Integer
end
# Query for the string "42", not the integer 42
Person.where(age: Mongoid::RawValue("42"))

인스턴스가 로드될 때 only 또는 without 쿼리 프로젝션 메서드로 제외된 모델 인스턴스의 필드에 액세스하려고 하면 Mongoid에서 Mongoid::Errors::AttributeNotLoaded 오류를 발생시킵니다.

Band.only(:name).first.label
#=> raises Mongoid::Errors::AttributeNotLoaded
Band.without(:label).first.label = 'Sub Pop Records'
#=> raises Mongoid::Errors::AttributeNotLoaded

이전 Mongoid 버전에서는 동일한 조건에서 ActiveModel::MissingAttributeError 가 발생했습니다. 이 클래스의 Mongoid 관련 사용법이 있는지 코드를 확인하고 Mongoid::Errors::AttributeNotLoaded 로 변경하세요. 또한 AttributeNotLoadedMongoid::Errors::MongoidError 에서 상속하지만 ActiveModel::MissingAttributeError 는 상속하지 않습니다.

날짜 값을 사용하여 시간 필드를 쿼리할 때 Mongoid는 이제 Time.zone 을(를) 올바르게 고려하여 유형 변환을 수행합니다.

class Magazine
include Mongoid::Document
field :published_at, type: Time
end
Time.zone = 'Asia/Tokyo'
Magazine.gte(published_at: Date.parse('2022-09-26'))
#=> will return all results on or after Sept 26th, 2022
# at 0:00 in Asia/Tokyo time zone.

이전 Mongoid 버전에서는 위의 코드가 Time.zone (현재 제거된 :use_activesupport_time_zone 설정과 관계없이)을 무시하고 항상 시스템 시간대 구역 사용하여 유형 변환을 수행했습니다.

이전 Mongoid 버전에서는 지속성 작업 중에 DateTime 로 타입캐스팅하는 것이 이미 구역 올바르게 사용하고 있었습니다.

embedded_in 관계에 touch: false 옵션이 설정하다 경우, 포함된 하위 문서 에서 touch 메서드를 호출해도 상위 문서 에서 touch 이(가) 호출되지 않습니다.

class Address
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :mall, touch: false
end
class Mall
include Mongoid::Document
include Mongoid::Timestamps
embeds_many :addresses
end
mall = Mall.create!
address = mall.addresses.create!
address.touch
#=> updates address.updated_at but not mall.updated_at

또한 touch 메서드는 여러 수준의 중첩된 내장된 문서를 사용하는 경우에도 상위 문서 당 하나의 지속성 작업을 수행하도록 최적화되었습니다.

관계에 touch: false 을 명시적으로 설정하다 하지 않는 한 포함된 하위 문서를 업데이트하면 이제 자동으로 상위 문서를 터치합니다.

class Address
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :mall, touch: false
end

다른 모든 연결의 경우 기본값 은 touch: false 로 유지됩니다.

Mongoid v8.1 upsert 메서드에 :replace 옵션을 추가했습니다. 이 옵션은 기존 문서 업데이트하거나 교체할지 여부를 지정하는 데 사용되었습니다.

Mongoid v9.0 이 플래그의 기본값 true 에서 false로 전환합니다. 즉, 기본값 으로 Mongoid v9.0 기존 문서 업데이트하고 대체하지 않습니다.

Mongoid v9.0 이전, _id 필드 변경하는 것은 문서 최상위 문서인지 내장된 문서인지, 그리고 업데이트 수행된 방식에 따라 일관되지 않게 동작합니다. v9.0에서, _id 필드 변경하면 문서 이전에 유지된 경우 문서 를 저장할 때 예외가 발생합니다.

Mongoid 9.0 은 또한 새로운 기능 플래그 immutable_ids 를 도입하며, 기본값은 true 입니다.

Mongoid::Config.immutable_ids = true

false로 설정하다 하면 일관되지 않은 이전 동작이 복원됩니다.

index 매크로의 옵션에서 별칭이 지정된 필드 이름을 사용할 수 있는 지원이 추가되었습니다: 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의 기능은 이러한 변경 사항을 지원 하지 않을 수 있습니다.

BSON 4 이전 버전이 있는 경우 BSON::Decimal128 로 선언된 모든 필드 BSON::Decimal128 값을 반환합니다. 그러나 BSON 5 이 있는 경우 BSON::Decimal128 로 선언된 모든 필드 기본값 으로 BigDecimal 값을 반환합니다.

class Model
include Mongoid::Document
field :decimal_field, type: BSON::Decimal128
end
# under BSON <= 4
Model.first.decimal_field.class #=> BSON::Decimal128
# under BSON >= 5
Model.first.decimal_field.class #=> BigDecimal

BSON 5과 함께 리터럴 BSON::Decimal128 값이 필요한 경우, Mongoid가 리터럴 BSON::Decimal128 필드를 허용하도록 지시할 수 있습니다:

Model.first.decimal_field.class #=> BigDecimal
Mongoid.allow_bson5_decimal128 = true
Model.first.decimal_field.class #=> BSON::Decimal128

참고

allow_bson5_decimal128 옵션은 BSON 5 이상에서만 효과가 있습니다. BSON 4 및 이전 버전에서는 설정을 완전히 무시합니다.

이제 Mongoid는 MongoDB Atlas 에 연결되어 검색 인덱스 생성 및 제거를 지원합니다. Mongoid::SearchIndexable API 통해 프로그래밍 방식으로 이 작업을 수행할 수 있습니다.

class SearchablePerson
include Mongoid::Document
search_index { ... } # define the search index here
end
# create the declared search indexes; this returns immediately, but the
# search indexes may take several minutes before they are available.
SearchablePerson.create_search_indexes
# query the available search indexes
SearchablePerson.search_indexes.each do |index|
# ...
end
# remove all search indexes from the model's collection
SearchablePerson.remove_search_indexes

MongoDB Atlas 에 연결되어 있지 않으면 검색 인덱스 정의가 무시됩니다. 검색 인덱스를 생성, 열거 또는 제거 하려고 하면 오류가 발생합니다.

편의를 위해 레이크 작업도 사용할 수 있습니다.

# create search indexes for all models; waits for indexes to be created
# and shows progress on the terminal.
$ rake mongoid:db:create_search_indexes
# as above, but returns immediately and lets the indexes be created in the
# background
$ rake WAIT_FOR_SEARCH_INDEXES=0 mongoid:db:create_search_indexes
# removes search indexes from all models
$ rake mongoid:db:remove_search_indexes

Time.configured 구성된 시간대를 래핑하는 time 객체 또는 표준 Ruby Time 클래스를 반환합니다. 이를 통해 시간대가 구성되지 않은 경우에도 시간 값을 쿼리할 수 있습니다.

이제 Mongoid에서 시간 값으로 무엇이든 수행하려는 경우(문서에 타임스탬프 사용 포함) 시간대를 설정해야 합니다. Time.configured 을(를) 사용하려면 Time.zone 로 바꿔야 합니다.

# before:
puts Time.configured.now
# after:
puts Time.zone.now
# or, better for finding the current Time specifically:
puts Time.current

표준 구역 를 설정하다 하지 않으면 nil 값과 관련된 코드에 오류가 표시됩니다. Rails를 사용하는 경우 기본값 구역 가 이미 UTC로 설정하다 되어 있습니다. Rails를 사용하지 않는 경우 다음과 같이 프로그램 시작 시 구역 를 설정하다 수 있습니다.

Time.zone = 'UTC'

이렇게 하면 구역 가 UTC로 설정하다 됩니다. 다음 명령을 실행 하여 사용 가능한 모든 구역 이름을 확인할 수 있습니다.

$ ruby -ractive_support/values/time_zone \
-e 'puts ActiveSupport::TimeZone::MAPPING.keys'

다음 코드를 고려하세요.

record = Model.with(collection: 'other_collection') { Model.first }
record.update(field: 'value')

Mongoid v9.0 이전에는 저장 옵션(여기서는 모델에 대한 대체 컬렉션 의 사양)이 기록 에서 기억되지 않기 때문에 앞의 코드는 자동으로 업데이트 실행에 실패했습니다. 따라서 기록 other_collection에서 로드되지만 업데이트되면 모델의 기본값 컬렉션 에서 문서 찾아 업데이트 시도합니다. 이 작업을 수행하려면 모든 업데이트 에 대해 컬렉션 명시적으로 지정해야 했습니다.

Mongoid v9.0부터, 명시적 저장 옵션에서 생성되거나 로드된 레코드는 해당 옵션(명명된 클라이언트, 다른 데이터베이스 또는 다른 컬렉션 포함)을 기억합니다.

레거시(v9.0 이전)가 필요한 경우 다음 플래그를 사용하여 활성화 할 수 있습니다.

Mongoid.legacy_persistence_context_behavior = true

Mongoid v9.0에서 이 플래그는 기본적으로 false입니다.

이 페이지의 내용