Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

MongoDB 5.0의 호환성 변경 사항

이 페이지의 내용

  • 특정 명령은 인식된 매개변수만 허용합니다.
  • 제거된 명령
  • 제거된 매개변수
  • 제거된 인덱스 유형
  • 제거된 지표
  • 라즈베리 파이 지원 제거
  • NaN으로 설정된 경우 TTL expireAfterSeconds 동작
  • 셸 변경
  • 복제본 세트
  • 제한 컬렉션에 대한 snapshot 읽기 우려 사항
  • local 는 기본 읽기 우려
  • cursor.map() 반환 유형
  • 운영자 변경 사항 업데이트
  • $setWindowFields 트랜잭션 및 스냅샷 읽기 문제가 있는 스테이지
  • 집계 파이프라인 연산자 매개변수 제한
  • listDatabases 출력 변경 사항
  • 보안
  • 맵 축소
  • Auditing
  • 샤딩된 트랜잭션에서 부실 청크의 위험 감소
  • 일반 변경 사항
  • 5.0 기능 호환성

다음 5.0의 변경 사항은 이전 버전의 MongoDB와의 호환성에 영향을 미칠 수 있습니다.

MongoDB 5.0부터 명령에서 명시적으로 허용하지 않는 매개 변수를 전달하면 특정 데이터베이스 명령에서 오류가 발생합니다. MongoDB 4.4 이하에서는 인식할 수 없는 매개변수는 자동으로 무시됩니다.

영향을 받는 명령:

MongoDB 5.0부터는 다음 데이터베이스 명령과 mongo 셸 헬퍼 메서드가 제거되었습니다.

제거된 명령
대안
db.collection.copyTo()
db.collection.save()
사용 불가
Mongo.getSecondaryOk()
Mongo.isCausalConsistency
사용 불가
Mongo.setSecondaryOk()
rs.secondaryOk()
사용 불가
사용 불가

MongoDB 5.0은 다음 서버 매개변수를 제거합니다.

제거된 매개변수
설명
cachePressureThreshold
MongoDB 5.0은 cachePressureThreshold 서버 매개변수를 제거합니다. WiredTiger가 스냅샷 창 크기를 계산하는 방법이 변경되었기 때문에 이 매개변수는 더 이상 관련이 없습니다.
shouldMultiDocTxnCreateCollectionAndIndexes
MongoDB 5.0은 shouldMultiDocTxnCreateCollectionAndIndexes 서버 매개변수를 제거합니다. 5.0 이상에서는 트랜잭션 내에서 수집 및 인덱스 생성이 항상 활성화됩니다. 더 이상 서버 매개변수를 사용하여 이 동작을 비활성화할 수 없습니다.
connPoolMaxShardedConnsPerHost
MongoDB 5.0은 connPoolMaxShardedConnsPerHost 서버 매개변수를 제거합니다.
connPoolMaxShardedInUseConnsPerHost
MongoDB 5.0은 connPoolMaxShardedInUseConnsPerHost 서버 매개변수를 제거합니다.
shardedConnPoolIdleTimeoutMinutes
MongoDB 5.0은 shardedConnPoolIdleTimeoutMinutes 서버 매개변수를 제거합니다.

MongoDB 5.0은 더 이상 사용되지 않는 geoHaystack 인덱스를 제거합니다. 대신 2D 인덱스를 사용하세요.

MongoDB 인스턴스를 5.0으로 업그레이드하고 featureCompatibilityVersion을 5.0 로 설정하면 기존의 모든 geoHaystack 인덱스가 삭제됩니다.

MongoDB 5.0부터 명령은 serverStatus opReadConcernCounters 쿼리 조작에 의해 지정된 읽기 우려 레벨 이 포함된 출력하지 않습니다. 대신 새 readConcernCounters opReadConcernCounters 대체하고 추가 정보를 포함합니다.

MongoDB 5.0부터 serverStatus 명령은 cache pressure percentage thresholdcurrent cache pressure percentagewiredTiger.snapshot-window-settings 아래에 출력하지 않습니다.

MongoDB 5.0부터 $currentOp.remainingOperationTimeEstimated 메트릭은 리샤딩 작업이 진행 중일 때만 수신자 샤드에 존재합니다.

MongoDB 5.0은 Raspberry Pi에 대한 지원을 제거합니다. Raspberry Pi에서 MongoDB를 실행하려면 버전 4.4를 설치하세요.

MongoDB 5.0부터 expireAfterSecondsNaN으로 설정된 TTL 인덱스는 이전 버전에 비해 동작이 변경됩니다.

행동 변화가 영향을 미칩니다.

  • 직접 업그레이드

  • 이전 버전에서 초기 동기화

  • mongorestore 이전 버전에서

이러한 작업을 수행하면 NaNexpireAfterSeconds 값이 0expireAfterSeconds 로 취급됩니다. 따라서 문서가 즉시 만료될 수 있습니다.

MongoDB 5.0.14 (및 6.0.2) 부터 서버는 expireAfterSecondsNaN 로 설정된 TTL 인덱스를 사용하지 않습니다.

mongo shell은 MongoDB v5.0에서 더 이상 사용되지 않습니다. 대체 셸은 mongosh입니다.

MongoDB v5.0에서도 shell 패키징이 변경되었습니다. 자세한 내용은 설치 지침에서 확인하세요.

MongoDB 5.0부터는 스토리지 엔진 개선으로 인해 enableMajorityReadConcern--enableMajorityReadConcern 변경할 수 없으며 항상 true으로 설정됩니다.

이전 버전의 MongoDB에서는 enableMajorityReadConcern--enableMajorityReadConcern 구성할 수 있으며 false으로 설정하여 스토리지 캐시 압력으로 인해 3멤버 PSA(Primary-Secondary-Arbiter) 아키텍처를 사용하는 배포가 고정되지 않도록 방지할 수 있습니다.

프라이머리-세컨더리-중재자(PSA) 아키텍처를 사용 중이라면 다음을 고려하세요.

  • 쓰기 고려 "majority"는 세컨더리를 사용할 수 없거나 지연되었을 때 성능 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법에 대한 조언은 자체 관리 PSA 복제본 세트를 통한 성능 문제 완화를참조하세요.

  • 글로벌 기본값 "majority"를 사용하고 있고, 쓰기 고려가 과반수 크기보다 작으면 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.

MongoDB 5.0부터 secondaryDelaySecs slaveDelay 대체합니다. 이 변경 사항은 이전 버전과 호환되지 않습니다.

분할 수평 DNS를 위한 클러스터 노드를 구성하려면 IP 주소 대신 호스트 이름을 사용합니다.

MongoDB v5.0부터 replSetInitiatereplSetReconfig 호스트 이름 대신 IP 주소를 사용하는 구성을 거부합니다.

호스트 이름을 사용하도록 업데이트할 수 없는 노드를 수정하려면 disableSplitHorizonIPCheck 사용합니다. 이 매개변수는 구성 명령에만 적용됩니다.

mongodmongos는 시작 시 유효성 검사를 하는 데disableSplitHorizonIPCheck에 의존하지 않습니다. 호스트 이름 대신 IP 주소를 사용하는 레거시 mongodmongos 인스턴스는 업그레이드 후 시작할 수 있습니다.

IP 주소로 구성된 인스턴스는 IP 주소 대신 호스트 이름을 사용하라는 경고를 기록합니다.

MongoDB 5.0부터는 config.transactions 컬렉션에서 다음과 같은 읽기 우려 사항 및 옵션이 있는 경우 트랜잭션이 아닌 읽기가 허용되지 않습니다.

MongoDB 5.0부터는 더 이상 복제본 세트로 실행 중인 클러스터에서 oplog에 수동으로 쓰기 작업을 수행할 수 없습니다. 독립형 인스턴스로 실행할 때 oplog에 쓰기 작업을 수행하는 작업은 MongoDB 지원팀의 지침을 통해서만 수행해야 합니다.

MongoDB 5.0부터 새로 추가된 중고등학교는 투표 회원으로 간주되지 않으며 SECONDARY 주에 도달할 때까지 선출될 수 없습니다.

새 투표 노드가 복제본 세트에 추가되면 replSetReconfig 내부적으로 노드의 구성에 newlyAdded 필드를 추가합니다. 4} 필드가 있는 노드는 현재 투표 노드 수에 포함되지 않습니다.newlyAdded 초기 동기화가 완료되고 노드가 SECONDARY 상태에 도달하면 newlyAdded 필드가 자동으로 제거됩니다.

참고

  • 0}이라는 이름의 필드를 추가하려고 하는 구성은 newlyAdded{ force: true } 실행해도 오류가 발생합니다.

  • 기존 노드에 newlyAdded 필드가 있는 경우 rs.reconfig() 를 사용하여 구성을 변경해도 newlyAdded 필드는 제거되지 않습니다. newlyAdded 5} 필드가 사용자가 제공한 구성에 추가됩니다.

  • replSetGetConfig 는 출력에서 newlyAdded 필드를 모두 제거합니다. newlyAdded 필드를 보려면 local.system.replset 컬렉션을 직접 쿼리할 수 있습니다.

MongoDB 5.0부터는 기본값인 { w: 1, wtimeout: 0 }이 아닌 settings.getLastErrorDefaults 기본 쓰기 우려를 지정할 수 없습니다. 대신 setDefaultRWConcern 명령을 사용하여 복제본 세트 또는 샤딩된 클러스터에 대한 기본 읽기 또는 쓰기 우려 구성을 설정합니다.

MongoDB 5.0부터 STARTUP2 상태의 복제본 집합 멤버는 쓰기 과반수에 참여하지 않습니다.

다음도 참조하세요.

MongoDB 5.0부터 암시적 기본 쓰기 우려는 w: majority입니다. 그러나 중재자가 포함된 배포의 경우 특별히 고려해야 할 사항이 있습니다.

  • 복제 세트의 투표 과반수는 1에 투표 회원 수의 절반을 반올림한 값입니다. 데이터를 포함하는 투표 구성원의 수가 투표 과반수보다 많지 않은 경우 기본 쓰기 문제는 { w: 1 } 입니다.

  • 다른 모든 시나리오에서 기본 쓰기 우려는 { w: "majority" }입니다.

특히 MongoDB는 다음 공식을 사용하여 기본 쓰기 문제를 결정합니다.

if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ]
defaultWriteConcern = { w: 1 }
else
defaultWriteConcern = { w: "majority" }

예를 들어 다음 배포와 해당 기본 쓰기 문제를 고려해보세요.

Non-Arbiters
중재자
투표 노드
과반수 투표 노드
자세한 내용은 암시적 기본 쓰기 고려를 참조하세요.
2
1
3
2
{ w: 1 }
4
1
5
3
{ w: "majority" }
  • 첫 번째 예시에서는

    • 총 3개의 투표 노드에는 2명의 비중재자와 1명의 중재자가 있습니다.

    • 투표 노드의 대다수(1 + 3의 절반, 반내림)는 2입니다.

    • 비중재자 수(2)는 대다수의 투표 노드(2)와 동일하므로 { w: 1 } 의 암시적 쓰기 문제가 발생합니다.

  • 두 번째 예시에서는

    • 총 5개의 투표 노드에는 4명의 비중재자와 1명의 중재자가 있습니다.

    • 투표 노드의 대다수(1 + 5의 절반, 반내림)는 3입니다.

    • 비 중재자 (4) 의 수가 투표 노드 (3) 의 과반수보다 많아서 암묵적인 쓰기 문제가 { w: "majority" } 발생합니다.

{ w: "majority" } 2} 기본 쓰기 우려는 선거가 발생하거나 복제본 세트 구성원을 사용할 수 없게 되는 경우 더 강력한 지속성을 보장합니다.

MongoDB 5.0부터는 제한 컬렉션에서 읽을 때 읽기 "snapshot" 우려를 사용할 수 없습니다.

MongoDB 5.0부터 "local" 기본 및 보조에 대한 읽기 작업에 대한 기본 읽기 우려 수준입니다.

이로 인해 필터를 사용하는 카운트 쿼리 및 적용 대상 쿼리의지연 시간이 크게 증가할 수 있습니다.

클러스터 전체 읽기 우려를 setDefaultRWConcern 설정하여 이 동작을 선택 해제할 수 있습니다.

cursor.map()mongo 레거시 shell에서 Array를 반환했습니다. 반환 유형은 mongoshCursor입니다. .toArray()를 사용하여 결과를 변환할 수 있습니다.

MongoDB 5.0부터 빈 피연산자 표현식( { } )과 함께 다음 업데이트 연산자를 사용할 때 mongod 에서 더 이상 오류가 발생하지 않습니다.

빈 업데이트는 변경 사항이 없으며 Oplog 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).

MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.

5.3 이전 버전에서는 $setWindowFields 집계 파이프라인 단계를 트랜잭션 또는 "snapshot" 읽기 문제와 함께 사용할 수 없습니다.

다음 집계 파이프라인 연산자에는 이제 64비트 정수 값 최대 제한이 있습니다.

이 제한을 초과하는 값을 전달하면 파이프라인이 잘못된 인수 오류를 반환합니다.

MongoDB 5.0부터는 에 대해 실행되는 listDatabases 명령의 출력이 에 대해 실행되는 mongod 의 출력과 더 일관성이 listDatabases mongos있습니다.

다음 표는 MongoDB 5.0과 이전 버전 간의 listDatabases 출력 필드에 대한 데이터 유형의 차이점을 보여 줍니다. 5.0과 이전 버전 간에 다른 필드만 나열됩니다.

필드
MongoDB 5.0 입력
MongoDB 4.4 이하(mongod)를 입력합니다.
MongoDB 4.4 이하(mongos)를 입력합니다.
sizeOnDisk
integer
double
integer
totalSize
integer
double
integer
totalSizeMb
integer
없음(아래 참조)
integer

2}의 출력은 이제 또는 에 대해 실행할 때 listDatabases totalSizeMb mongos mongod필드를 포함합니다. MongoDB 4.4 이하에서는 totalSizeMbmongos 대해 실행될 때만 나타납니다. totalSizeMbsizeOnDisk 필드의 합계로, 메가바이트로 표시됩니다.

2}에 대해 mongos shards listDatabases 실행하면 출력의 필드에 특정 샤드의 각 컬렉션에 대한 필드-값 쌍이 포함됩니다. 7} 필드의 크기 shards 값은 정수로 표시됩니다.

MongoDB 5.0부터 mongodmongos 이제 인증서에 주체 대체 이름 특성이 포함되지 않은 경우 시작 경고를 발행합니다.

다음 플랫폼은 일반 이름 유효성 검사를 지원하지 않습니다:

  • iOS 13 이상

  • MacOS 10.15 이상

  • Go 1.15 이상

이러한 플랫폼을 사용하는 클라이언트는 호스트 이름이 CommonName 속성으로 지정된 x.509 인증서를 사용하는 MongoDB 서버에 인증하지 않습니다.

버전 5.0부터 MongoDB는 맵 축소 작업을 더 이상 지원하지 않습니다.

맵 리듀스 작업에 대한 집계 파이프라인 대안의 예는 집계 파이프라인으로 맵 리듀스맵 리듀스 예시를 참조하세요.

MongoDB 5.0은 런타임에 구성할 수 있는 감사 기능을 추가했습니다.

0}이 로 auditLog.runtimeConfiguration true설정된 mongod mongos 경우 및 구성 setParameter.auditAuthorizationSuccess 파일은 더 이상 를 설정하거나 감사 필터를 구성할 수 없습니다. 서버 구성 파일에 이러한 설정이 포함되어 있으면 서버가 시작되지 않고 오류가 기록됩니다.

auditLog.runtimeConfiguration false 로 설정되고 감사 필터 구성 문서가 있는 경우 시작 경고가 발생하지만 서버는 중단되지 않습니다.

MongoDB 5.0부터는 transactionLifetimeLimitSeconds 매개 변수를 변경하는 경우 모든 구성 서버 복제본 세트 멤버에서 transactionLifetimeLimitSeconds 동일한 값으로 변경해야 합니다. 이 값을 일관되게 유지합니다.

  • 적어도 샤드 복제본 세트 멤버의 트랜잭션 수명 제한만큼 라우팅 테이블 기록이 유지되도록 합니다.

  • 트랜잭션 재시도 빈도를 줄여 성능을 향상시킵니다.

MongoDB 5.0부터 도입됨:

  • featureCompatibilityVersion이 "5.0" 이상으로 설정된 경우 사용자는 더 이상 <database>.system.views 컬렉션에 직접 쓸 수 없습니다.

  • reIndex 2} 명령과 셸 메서드는 독립 db.collection.reIndex() 실행형 인스턴스에서만 실행할 수 있습니다.

  • 단일 파이프라인에 허용되는 집계 파이프라인 단계의 수는 1,000개로 제한됩니다.

  • 2} 또는 가 활성화되어 있을 directoryPerDB --directoryperdb 때 데이터베이스의 최종 컬렉션을 제거하거나 데이터베이스 자체를 제거하면 해당 데이터베이스의 새로 비워진 하위 디렉터리가 삭제됩니다.

  • $subtract 집계 연산자는 필요한 경우 결과 값을 정확하게 나타내기 위해 결과의 데이터 유형을 변환합니다. 구체적인 전환은 $subtract를 참조하세요.

  • MongoDB는 --serviceExecutor 명령줄 옵션과 해당 net.serviceExecutor 구성 옵션을 제거합니다.

  • --apiStrict 옵션이 설정된 경우 동일한 클라이언트 세션에서 여러 동시 사용자로 인증할 수 없습니다. --apiStrict 옵션이 설정된 경우, 기존 사용자로 로그인한 상태에서 새 사용자로 인증하려고 하면 인증 시도당 한 번씩 오류 메시지가 생성됩니다. --apiStrict 옵션을 사용하지 않는 경우, 기존 사용자로 로그인한 상태에서 새 사용자로 인증하면 인증 시도당 한 번씩 로그에 경고가 기록됩니다.

  • weights 옵션은 $text 인덱스에만 사용할 수 있습니다.

  • 암시적 기본 쓰기 문제를 변경하는 구성으로 분할되지 않은 복제본 세트를 재구성하기 전에 전역 기본 쓰기 문제를 명시적으로 설정해야 합니다. 전역 기본 쓰기 문제를 설정하려면 setDefaultRWConcern 명령을 사용합니다.

  • mongosh에서 replSetOplog 크기를 설정하려면 replSetResizeOplog 명령과 함께 Double() 생성자를 사용하세요.

더 이상 사용되지 않습니다.
설명
mongo
레거시 mongo shell은 MongoDB v5.0에서 더 이상 사용되지 않습니다. 대체품은 mongosh입니다.

버전 4.4.1부터 더 이상 사용되지 않습니다: 대신 db.printSecondaryReplicationInfo()를 사용하세요.

버전 4.4.1부터 더 이상 사용되지 않습니다: 대신 rs.printSecondaryReplicationInfo()를 사용하세요.

버전 5.0에서 더 이상 사용되지 않습니다. 대신 security.clusterIpSourceAllowlist 사용합니다.
버전 5.0에서 더 이상 사용되지 않습니다. 대신 --clusterIpSourceAllowlist 사용합니다.
버전 5.0에서 더 이상 사용되지 않습니다. 대신 서버에서 연결을 끊어 세션을 종료하세요.
버전 5.0에서 더 이상 사용되지 않습니다. 대신 서버에서 연결을 끊어 세션을 종료하세요.
로컬 감사 메시지 필드(Local Audit Message Field)
버전 5.0에서 더 이상 사용되지 않습니다. 대신 clientMetadata 감사 메시지에 localEndpoint 필드를 사용하세요.

MongoDB 5.0은 다음 와이어 프로토콜 옵코드를 더 이상 지원하지 않습니다.

  • OP_REPLY

  • OP_UPDATE

  • OP_INSERT

  • OP_QUERY

  • OP_GET_MORE

  • OP_DELETE

  • OP_KILL_CURSORS

최신 드라이버 버전에서는 이러한 더 이상 사용되지 않는 opcodes 대신 OP_MSG를 사용합니다.

관련 명령어 및 메서드도 MongoDB 5.0에서 더 이상 사용되지 않습니다.

  • getLastError

  • db.getLastError()

  • db.getLastErrorObj()

드라이버가 최신 유선 프로토콜을 사용하도록 하려면 드라이버를 5.0 호환 버전으로 업그레이드하십시오.

getLastErrordb.getLastError()0}, 또는 를 db.getLastErrorObj() 명시적으로 사용하는 모든 코드는 대신 CRUD API를 사용하여 원하는 쓰기 우려로 쓰기를 발행해야 합니다. 쓰기 작업의 성공 또는 실패에 대한 정보는 드라이버에서 반환 값으로 직접 제공됩니다.

5.0의 일부 기능을 사용하려면 5.0 바이너리뿐만 아니라 기능 호환성 버전 (fCV)을 5.0으로 설정해야 합니다. 이러한 기능에는 다음이 포함됩니다.

돌아가기

5.0