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

MongoDB 9.0의 호환성 변경 사항

이 페이지에서는 이전 버전의 MongoDB 와의 호환성에 영향을 줄 수 있는 MongoDB 9.0 에 도입된 변경 사항에 대해 설명합니다.

더 이상 사용되지 않습니다.
설명

prefixPreview, suffixPreview, substringPreview

MongoDB 9.0부터 text 알고리즘을 사용하는 prefixPreview, suffixPreview, substringPreview 쿼리 유형은 더 이상 사용되지 않고 제거됩니다. 대신 string 알고리즘과 함께 prefix, suffix, 또는 substring 쿼리 유형을 사용하세요.

fleDisableSubstringPreviewParameterLimits

MongoDB 9.0에서 암호화된 필드에 대한 하위 문자열 쿼리의 내부 제한은 재정의할 수 없습니다.

MongoDB 9.0부터는 축적자 표현식에 빈 필드 이름이 있는 경우 $group 단계에서 오류가 반환됩니다. 자세한 내용은 빈 필드 이름 $group 제한을 참조하세요.

MongoDB 9.0부터 aggregate 명령에 대한 $queryStats 키에는 옵션이 명시적으로 설정된 경우 allowPartialResults 옵션이 포함됩니다. 쿼리 통계는 allowPartialResults이 생략되었는지, 명시적으로 true인지, 명시적으로 false인지 구분할 수 있습니다.

이 추가 사항은 allowPartialResults을 설정하는 aggregate 쿼리에 대한 key 및 keyHash 직렬화를 변경합니다. queryShapeHash는 변경되지 않습니다. keyHash와 일치하는 다운스트림 소비자는 이러한 쿼리에 대해 다른 값을 관찰할 수 있습니다.

자세한 내용은 aggregate 명령 쿼리 형태를 참조하세요.

MongoDB 9.0부터는 인덱스된 필드가 멀티키 필드가 되는 동안 해당 필드를 참조하는 쿼리가 실행되면 QueryKilledError 오류와 함께 쿼리가 실패할 수 있습니다. 문서를 삽입하거나 업데이트하여 필드에 배열 값이 포함되면 인덱스된 필드가 멀티키가 됩니다.

이 오류로 인해 쿼리가 실패하면 삽입 또는 업데이트 작업이 완료된 후 쿼리를 다시 실행하세요.

MongoDB 9.0부터는 복제본 세트 투표로 인해 노드의 역할이 변경되어 읽기 설정 (read preference)을 더 이상 충족하지 않게 되면, readPreference가 primary 또는 secondary 인 상태로 열린 변경 스트림은 getMore에서 재개 가능한 오류 InterruptedDueToReplStateChange (오류 코드 11602)를 반환합니다. 이전 버전에서는 커서가 동일한 노드에서 결과를 계속 반환했습니다.

규정을 준수하는 드라이버와 mongos는 마지막 재개 토큰에서 자동으로 재개됩니다. 수동 getMore 루프와 mongosh는 resumeAfter로 재개해야 합니다. 자세한 내용은 변경 스트림 재개를 참조하세요.

MongoDB 9.0부터 2dsphere 인덱스 키 추출 실패 시 명명된 오류 코드 510 (GeoKeyExtractionFailed) 및 511 (GeoKeyExtractionFailedTimeseries)가 반환됩니다. 이 코드는 일반 2dsphere 인덱스의 이전 어설션 코드 16755 및 16756와 time series 컬렉션의 183934 및 183493을 대체합니다. 애플리케이션이 이전 코드와 일치하는 경우 510 및 511와 일치하도록 업데이트하세요.

MongoDB 9.0부터 복제본 세트의 서로 다른 데이터베이스 간에 컬렉션 이름을 변경할 때 renameCollection 명령은 소스 및 대상 컬렉션에 대한 배타적 잠금을 유지합니다. 잠금은 작업 전체 기간 동안 지속되며 두 컬렉션에 대한 DDL 작업 및 쓰기 (write)를 차단합니다. 대부분의 읽기 작업은 잠금 없는 읽기를 사용하며 차단되지 않습니다.

이전 버전에서는 renameCollection이(가) 이름 변경을 완료하기 전에 소스 컬렉션의 잠금을 해제했습니다. 해당 창(window) 동안 소스 컬렉션에 대한 동시 쓰기 (write)가 손실될 수 있습니다.

이 변경 사항은 복제본 세트에만 영향을 미칩니다. 샤딩된 클러스터는 이미 이름 변경 기간 동안 두 컬렉션을 모두 잠급니다.

MongoDB 9.0부터 서버 측 JavaScript는 mongod 호스팅하다 시간 구역과 관계없이 로컬 Date 작업을 UTC로 평가하는 WebAssembly(WASM) 기반 엔진에서 실행됩니다. 이전 버전에서는 이러한 작업이 호스트 시간대를 따랐습니다. 이 변경 사항은 $function, $accumulator, $where 및 mapReduce에서 실행되는 JavaScript에 영향을 미칩니다.

저장된 BSON 날짜 값은 변경되지 않으며, Date.prototype.getTime(), Date.prototype.toISOString() 및 getUTC*() 메서드와 같은 UTC 작업도 마찬가지입니다. 이 차이는 현지 시간 작업에 영향을 미칩니다.

  • Date.prototype.toString()

  • Date.prototype.toTimeString()

  • Date.prototype.getHours() 및 기타 로컬 getter

  • 로컬 Date 생성자 및 세터

  • 비교 연산자 없이 호출된 Array.prototype.sort()을(를) 포함하여 날짜를 문자열로 암시적으로 변환하는 작업

TZ=America/New_York에서 실행되는 mongod에 대한 다음 작업을 고려해 보세요.

db.events.insertOne( { name: "before-opening", occurredAt: ISODate("2024-01-15T13:30:00Z")} ) db.events.find( { $expr: { $function: { body: function(date) { return date.getHours() < 9; }, args: [ "$occurredAt" ], lang: "js" } }} )

이전 버전에서, 13:30 UTC는 뉴욕에서 08:30 이므로, getHours()는 8을 반환하고 쿼리는 문서와 일치합니다. MongoDB 9.0 부터, getHours()은 13을 반환하고 쿼리가 일치하지 않습니다. 저장된 날짜가 유효하게 유지되기 때문에 작업이 두 버전 모두 성공합니다. 따라서 차이가 오류로 보고되지 않습니다. 혼합 바이너리 버전을 실행 배포서버는 동일한 JavaScript에 대해 다른 결과를 반환할 수 있습니다.

MongoDB 9.0으로 업그레이드하기 전에 $function, $accumulator, $where 및 mapReduce 코드에서 JavaScript를 검토하여 로컬 Date 사용량을 확인하고 mongod 호스팅 시간대를 사용하지 마십시오.

명명된 시간대에서 날짜를 평가하려면 JavaScript 대신 명시적 timezone 인수가 포함된 집계 날짜 연산자를 사용하세요. 다음 쿼리는 모든 버전에서 동일한 결과를 반환합니다.

db.events.find( { $expr: { $lt: [ { $hour: { date: "$occurredAt", timezone: "America/New_York" } }, 9 ] }} )

결정론적 비교나 직렬화가 필요한 JavaScript의 경우, 로컬 Date 메서드나 암시적 string 변환 대신 getTime(), toISOString() 또는 getUTC*() 메서드를 사용하세요. 정렬된 값에 날짜가 포함될 수 있는 경우 Array.prototype.sort()에 명시적 비교자를 전달하세요.

자세한 내용은 서버 측 JavaScript를 참조하세요.

MongoDB 9.0부터는 ppc64le 아키텍처에서 서버 측 JavaScript를 사용할 수 없습니다. ppc64le 용 mongod 및 mongos 바이너리에는 JavaScript 엔진이 포함되어 있지 않습니다. 결과적으로 해당 아키텍처에서는 $function, $accumulator, $where 및 mapReduce 작업이 실패합니다. 이전 버전에서는 ppc64le에서 이러한 작업을 실행했습니다.

설정 파일 설정이나 명령줄 옵션을 사용하여 ppc64le에서 서버 측 JavaScript를 활성화할 수 없습니다.

ppc64le 배포서버를 MongoDB 9.0으로 업그레이드하기 전에 $function, $accumulator, $where 또는 mapReduce를 사용하는 애플리케이션을 식별하십시오. 서버 측 JavaScript가 필요하지 않은 집계 파이프라인 단계 및 연산자를 사용하도록 이러한 작업을 다시 작성하십시오. 다른 아키텍처를 사용하는 배포서버에서 작업을 실행할 수도 있습니다.

자세한 내용은 서버 측 JavaScript를 참조하세요.

MongoDB 9.0은 Queryable Encryption이 활성화된 컬렉션의 암호화됨 string 필드에 대한 접두사, 접미사 및 하위 문자열 쿼리의 GA를 표시합니다. 이 GA 기능은 MongoDB 8.2에서 릴리스된 Public Preview 버전과 호환되지 않으므로, 기능이 GA로 전환된 지금은 사용해서는 안 됩니다.

Queryable Encryption을 사용하여 접두사, 접미사 또는 부분 문자열 쿼리를 사용하려면 MongoDB 버전이 9.0 이상이어야 하며 9.0 호환 드라이버가 필요합니다. 여전히 Public Preview를 사용 중인 경우 MongoDB는 버전 8.2 또는 8.3을 유지해야 하며 8.2 또는 8.3 호환 드라이버가 필요합니다. 호환 드라이버.

MongoDB 9.0 드라이버는 MongoDB 8.2 또는 8.3 드라이버로 생성된 데이터를 해독할 수 있습니다. 업그레이드 옵션은 다음 섹션을 참조하세요.

가능하면 Public Preview 기능으로 생성된 컬렉션을 마이그레이션하지 말고 새 컬렉션을 만듭니다:

  1. MongoDB 서버와 드라이버를 9.0(으)로 업그레이드합니다.

  2. 이전 컬렉션과 다른 이름으로 암호화된 새 컬렉션을 구성합니다.

  3. 새 데이터를 삽입하거나 로컬 사본이 있는 경우 기존 데이터의 암호화되지 않은 버전을 삽입합니다.

  4. 이전 컬렉션을 제거합니다.

새 데이터를 사용할 수 없거나 기존 데이터의 암호화되지 않은 버전이 없는 경우:

  1. MongoDB 서버와 드라이버를 9.0으로 업그레이드합니다.

  2. 9.0 호환 드라이버를 사용하여 암호화된 컬렉션을 쿼리하여 암호를 해독합니다.

  3. 출력을 로컬에 저장합니다.

  4. 암호화된 새 컬렉션을 구성하고 데이터를 수집합니다.

경고

  • mongoexport 및 mongodump 작업은 컬렉션을 해독하지 않습니다. 해독된 데이터를 출력하려면 드라이버에서 컬렉션을 쿼리해야 합니다.

  • MongoDB 9.0 호환 드라이버는 MongoDB 8.2 용으로 암호화된 데이터에서 암호화된 필드를 쿼리할 수 없습니다. 공개 미리보기 쿼리 유형. 데이터를 해독하려면 암호화되지 않은 필드를 쿼리하거나 전체 컬렉션을 쿼리합니다.

다음 섹션에서는 배포서버 에서 이전 버전과 호환되지 않는 기능을 제거하기 위한 정보를 제공합니다. MongoDB 9.0 에서 이전 버전으로 다운그레이드하는 경우 다음 섹션을 검토 다운그레이드 후 배포서버 성공적으로 실행되는지 확인합니다.

MongoDB 9.0에서 $convert을(를) 사용하여 객체를 binData(으)로 변환할 수 있습니다. 자세한 내용은 객체를 binData로 변환을 참조하세요.

이 변환을 사용하는 뷰를 생성하면 이전 버전으로 다운그레이드한 후 해당 뷰에 대한 쿼리가 오류를 반환합니다.

9.0에서 다운그레이드하기 전에 이 변환을 사용하는 뷰를 업데이트하거나 제거하십시오.