Docs Menu
Docs Home
/

MongoDB 제한 및 임계값

이 문서 MongoDB 의 하드(hard) 및 소프트(soft) 제한 사항이 나열되어 있습니다. 별도로 지정하지 않는 한, MongoDB Atlas 와 자체 호스팅 배포서버 모두에 제한이 적용 .

MongoDB 컬렉션 또는 데이터베이스 크기에 엄격한 제한을 적용하지 않습니다. 최대 크기는 호스팅하다 파일 시스템에 따라 다릅니다.

  • 4ext: 16 테비바이트(TiB) 최대 파일 크기

  • XFS: 8 엑비바이트(EiB) 최대 파일 크기

파일 시스템 또는 hardware 제한 이상으로 확장하다 하려면 Atlas가 아닌 배포서버에샤딩 사용하세요. 이러한 제한에 근접하거나 성능 병목 현상이 발생한 온프레미스 컬렉션의 경우, MongoDB 자동 확장 지원하는 MongoDB Atlas 로 샤딩 하거나 마이그레이션할 것을 권장합니다.

컬렉션 샤딩 때 MongoDB 샤드 키 기반으로 초기 청크 범위를 결정합니다.

  • 기본값 chunkSize: 128 MB

  • 일반적인 평균 샤드 키 크기: 16 바이트

BSON 문서 크기

최대 BSON 문서 크기는 16 메비바이트입니다.

최대 문서 크기는 단일 문서 전송 중에 과도한 양의 RAM 이나 과도한 양의 대역폭을 사용할 수 없도록 하는 데 도움이 됩니다. 최대 크기보다 큰 문서를 저장 위해 MongoDB GridFS API 제공합니다. GridFS 에 mongofiles 대한 자세한 내용은 및 운전자 설명서를 참조하세요.

BSON 문서의 중첩 깊이

MongoDB는 BSON 문서에 대해 100개 이하의 중첩 수준을 지원합니다. 각 객체 또는 배열은 수준을 추가합니다.

데이터베이스 이름의 대/소문자 사용

데이터베이스를 구분하기 위해 대소문자를 사용하지 않도록 합니다. 데이터베이스 생성한 후에는 데이터베이스를 참조할 때 대문자를 일관적인 사용하세요.

예시 들어 salesDataSalesData와 같은 이름의 두 데이터베이스를 사용할 수 없습니다. salesData 데이터베이스 만드는 경우 salesdata 또는 SalesData와 같이 대/소문자를 번갈아 사용하여 참조하지 않도록 합니다.

Windows용 데이터베이스 이름에 대한 제한 사항

Windows 에서는 데이터베이스 이름에 다음 문자를 포함할 수 없습니다.

/\. "$*<>:|?
Unix 및 Linux 시스템의 데이터베이스 이름에 대한 제한 사항

Unix 및 Linux 시스템에서는 데이터베이스 이름에 다음 문자를 포함할 수 없습니다.

/\. "$
데이터베이스 이름의 null 문자

데이터베이스 이름은 모든 플랫폼에서 null 문자를 포함할 수 없습니다.

데이터베이스 이름 길이

데이터베이스 이름은 비워둘 수 없으며 64바이트 미만이어야 합니다.

컬렉션 이름 제한

컬렉션 이름은 밑줄 또는 문자로 시작해야 하며 다음은 불가능합니다.

  • 포함 $

  • 빈 문자열입니다(예: "")

  • null 문자 포함

  • system. 접두사로 시작(내부용으로 예약됨)

  • contain .system.

컬렉션 이름에 밑줄 문자와 같은 특수 문자가 포함되어 있거나 숫자로 시작하는 경우 컬렉션에 액세스하려면 mongoshdb.getCollection() 메서드 또는 드라이버의 유사한 메서드를 사용합니다.

네임스페이스 길이

샤딩되지 않은 컬렉션 및 뷰에 대한 네임스페이스 길이 제한은 255바이트이고 샤딩된 컬렉션의 경우 235바이트입니다. 컬렉션 또는 뷰의 경우 네임스페이스에는 데이터베이스 이름, 점(.) 구분 기호 및 컬렉션/뷰 이름(예: <database>.<collection>)이 포함됩니다.

필드 이름에 대한 제한 사항
  • 필드 이름에는 null 문자를 포함 할 수 없습니다.

  • 서버는 점(.)과 달러 기호($)가 포함된 필드 이름의 저장을 허용합니다.

  • MongoDB 5.0은 필드 이름에 ($) 및 (.)를 사용에 대한 지원을 개선했습니다.몇 가지 제한 사항이 있습니다. 자세한 내용은 필드 이름 고려 사항을 참조하십시오.

  • 각 필드 이름은 문서 내에서 고유해야 합니다. 문서에 중복 필드가 있는 경우 MongoDB CRUD 작업이 예기치 않게 작동할 수 있으므로 중복 필드가 있는 문서를 저장해서는 안 됩니다.

_id에 대한 제한 사항

필드 이름 _id는 프라이머리 키로 사용하기 위해 예약되어 있으며, 이 값은 컬렉션에서 고유해야 하고 변경할 수 없으며 배열이나 정규 표현식 이외의 모든 유형이 될 수 있습니다. _id가 하위 필드를 포함하는 경우, 하위 필드 이름은 ($) 기호로 시작할 수 없습니다.

경고

주의하세요. 이 섹션의 문제로 인해 데이터 손실 또는 손상이 발생할 수 있습니다.

MongoDB는 중복 필드 이름을 지원하지 않습니다.

MongoDB 쿼리 언어에는 필드 이름을 만들거나 업데이트할 때 다음과 같은 제한이 있습니다.

  • MongoDB는 필드 이름이 중복된 문서 삽입을 지원하지 않습니다. 일부 BSON 빌더는 이러한 문서 생성을 지원할 수 있지만, MongoDB는 삽입이 성공했거나 성공한 것처럼 보여도 이를 지원하지 않습니다.

  • 필드 이름이 중복된 문서의 업데이트는 업데이트 성공했거나 성공한 것처럼 보이더라도 지원되지 않습니다.

예시 를 들어, 필드 이름이 중복된 BSON 문서 MongoDB 운전자 통해 삽입하면 운전자 삽입 전에 중복 값을 조용히 삭제하거나 중복 필드가 포함된 유효하지 않은 문서 삽입될 수 있습니다. 이러한 문서를 쿼리하면 일관되지 않은 결과가 나타납니다.

MongoDB 부터 문서 6.1 중복된 필드 이름이 있는지 validate 확인하려면 full 필드 로 설정하다 상태에서 명령을 true 사용합니다. 모든 MongoDB 버전에서 $objectToArray 집계 연산자 사용하여 문서 중복된 필드 이름이 있는지 확인합니다.

모호한 필드 이름 사용 자제

임베디드 필드에 대해 점 표기법과 동일한 필드 이름을 사용하지 마세요. 문서에 포함된 필드 { "a" : { "b": ... } }가 있는 경우, 해당 컬렉션의 다른 문서에는 최상위 필드 "a.b"없어야 합니다.

내장된 필드 와 최상위 필드 같은 방식으로 참조할 수 있다면 내장된 필드 에서 인덱싱 및 샤딩 작업이 발생합니다. 컬렉션 동일한 방식으로 참조하는 필드 포함되어 있는 동안에는 최상위 필드 "a.b" 에서 인덱스 하거나 샤드 할 수 없습니다.

예시 들어 컬렉션 내장된 필드 { "a" : { "b": ... } } 와 최상위 필드 "a.b"가 모두 있는 문서가 포함된 경우, 인덱싱 및 샤딩 작업은 내장된 필드 에서 발생합니다. 컬렉션 포함된 필드 { "a" : { "b": ... } }도 포함된 경우 최상위 필드 "a.b" 에서 인덱스 하거나 샤드 할 수 없습니다.

달러 기호(``$``)와 마침표(``.``)를 사용한 가져오기 및 내보내기 관련 문제

MongoDB 5.0부터는 문서 필드 이름에 달러($) 접두사를 붙일 수 있으며 마침표(.)를 포함할 수 있습니다. 그러나 mongoimportmongoexport는 이러한 문자를 사용하는 필드 이름이 있는 일부 상황에서 예상대로 작동하지 않을 수 있습니다.

MongoDB 확장 JSON v2는 유형 래퍼와 유형 래퍼와 이름이 같은 필드를 구분할 수 없습니다. 해당 BSON 표현에 달러($) 접두사가 붙은 키가 포함될 수 있는 상황에서는 확장 JSON 형식을 사용하지 않도록 합니다. DBRef 메커니즘에는 해당 일반 규칙이 적용되지 않습니다.

필드 이름에 마침표(.)가 있는 mongoimportmongoexport를 사용하는 것에도 제한 사항이 있습니다. CSV 파일은 마침표(.)를 사용하여 데이터 계층 구조를 나타내므로 필드 이름에 마침표(.)가 있으면 중첩 수준으로 잘못 해석될 수 있습니다.

달러 기호(``$``) 및 마침표(``.``)로 인한 데이터 손실 가능성

달러($) 접두사가 붙은 필드 이름 또는 마침표(.)가 포함된 필드 이름을 사용할 때 MongoDB 5.0 이전 서버에서 이러한 필드 이름이 승인되지 않은 쓰기(쓰기 고려 w=0)와 함께 사용되는 경우 데이터가 손실될 가능성이 적습니다.

insert, updatefindAndModify 명령을 실행할 때 5.0 호환 드라이버는 필드 이름 앞에 달러($)가 붙거나 마침표(.)가 포함된 문서 사용에 대한 제한을 제거합니다. 이러한 필드 이름은 이전 드라이버 버전에서 클라이언트 사이드 오류를 발생시켰습니다.

드라이버가 연결된 서버 버전에 관계없이 제한이 제거됩니다. 5.0 드라이버가 이전 서버로 문서를 보내는 경우 오류를 보내지 않고 문서가 거부됩니다.

컬렉션당 인덱스 수

단일 컬렉션 64 개 이하의 인덱스가 있을 수 있습니다.

복합 인덱스의 인덱싱된 필드 수

복합 인덱스 32 개 이하의 필드를 가질 수 있습니다.

쿼리는 텍스트 및 지리 공간적 인덱스를 모두 사용할 수 없습니다.

특수 텍스트 인덱스가 필요한 $text 쿼리를 다른 유형의 특수 인덱스가 필요한 쿼리 연산자와 결합할 수 없습니다. 예를 들어 $text 쿼리와 $near 연산자를 결합할 수 없습니다.

2dsphere 인덱스가 있는 필드는 도형만 보유할 수 있습니다.

2dsphere 인덱스가 있는 필드는 좌표 쌍 또는 GeoJSON 데이터 형식의 도형 데이터를 보유해야 합니다. 도형이 아닌 데이터가 있는 문서를 2dsphere 인덱스 필드에 삽입하거나 인덱스 필드에 도형이 아닌 데이터가 있는 컬렉션에 2dsphere 인덱스를 빌드하려고 하면 작업이 실패합니다.

샤드 작업 제한의 고유 인덱스 한도입니다.

제한된 수의 2dsphere 인덱스 키

2dsphere 인덱스에 대한 키를 생성하기 위해 mongodGeoJSON 도형을 내부 표현에 매핑합니다. 결과적인 내부 표현은 큰 값 배열일 수 있습니다.

mongod가 배열을 포함하는 필드에 인덱스 키를 생성하면 mongod은 각 배열 요소에 대한 인덱스 키를 생성합니다. 복합 인덱스의 경우, mongod은 각 필드에 대해 생성된 키 세트의 데카르트 곱 을 계산합니다. 두 세트가 모두 큰 경우 데카르트 곱을 계산하면 작업이 메모리 제한을 초과할 수 있습니다.

indexMaxNumGeneratedKeysPerDocument는 메모리 부족 오류를 방지하기 위해 단일 문서에 대해 생성되는 최대 키 수를 제한합니다. 기본값은 문서당 100,000개의 인덱스 키입니다. 제한을 올릴 수는 있지만 indexMaxNumGeneratedKeysPerDocument 매개 변수가 지정한 것보다 더 많은 키가 필요한 경우 작업이 실패합니다.

WiredTiger 스토리지 엔진의 Covered Queries에서 반환된 NaN 값은 항상 double 형식입니다

인덱스에 포함되는 쿼리에서 반환된 필드 값이 NaN인 경우 해당 NaN 값의 유형은 항상 double입니다.

Multikey Index

멀티키 인덱스는 배열 필드에 대한 쿼리를 처리할 수 없습니다.

지리 공간적 인덱스

지리 공간적 인덱스는 쿼리를 처리할 수 없습니다.

인덱스 빌드의 메모리 사용량

createIndexes 는 컬렉션에 하나 이상의 인덱스 빌드를 지원합니다. createIndexes 는 디스크의 메모리와 임시 파일의 조합을 사용하여 인덱스를 빌드 . 기본값 메모리 제한은 200 명령당 메가바이트이며, 해당 명령에 내장된 모든 인덱스 간에 균등하게 createIndexes 공유됩니다. 예시 들어 createIndexes 하나의 명령으로 10 인덱스를 빌드 경우 MongoDB 기본값 메모리 제한인 200를 사용할 때 인덱스 빌드 프로세스 에 각 인덱스 20 메가바이트를 할당합니다. 메모리 제한에 도달하면 MongoDB --dbpath 내의 _tmp 하위 디렉토리에 임시 파일을 생성하여 빌드 완료합니다.

maxIndexBuildMemoryUsageMegabytes 매개 변수를 사용하여 메모리 제한을 조정합니다. 이 매개변수를 늘리는 것은 단일 명령으로 많은 동시 인덱스 빌드를 실행 createIndexes 500GB 보다 큰 데이터 세트 인덱스 하는 경우와 같이 드문 경우에만 필요합니다.

createIndexes 명령의 제한은 maxIndexBuildMemoryUsageMegabytes 입니다. 기본값 인 maxNumActiveUserIndexBuilds 인 3를 사용하는 경우, 모든 동시 인덱스 빌드의 총 메모리 사용량은 maxIndexBuildMemoryUsageMegabytes값의 최대 3 배에 도달할 수 있습니다.

maxIndexBuildMemoryUsageMegabytes 제한은 createIndexes 와 같은 사용자 명령 또는 초기 동기화와 같은 관리 프로세스에 의해 시작된 모든 인덱스 빌드에 적용됩니다.

초기 동기화 한 번에 하나 컬렉션 만 채우며 메모리 제한을 초과할 위험이 없습니다. 그러나 사용자가 여러 데이터베이스의 여러 컬렉션에 대한 인덱스 빌드를 동시에 시작할 수 있습니다.

데이터 정렬 및 인덱스 유형

다음 인덱스 유형은 단순 이진 비교만 지원하며 데이터 정렬은 지원하지 않습니다:

단순 데이터 정렬이 아닌 컬렉션에 text 또는 2d 인덱스를 만들려면 인덱스를 만들 때 {collation: {locale: "simple"} }를 명시적으로 지정해야 합니다.

Hidden Indexes
최대 정렬 키 수
  • 최대 32개의 키를 기준으로 정렬할 수 있습니다.

  • 중복 필드가 포함된 정렬 패턴을 제공하면 오류가 발생합니다.

제한된 컬렉션의 최대 문서 수

createmax 매개 변수를 사용하여 제한 컬렉션의 최대 문서 수를 지정하는 경우 이 값은 문서 수 2 31개보다 작아야 합니다.

제한된 컬렉션을 생성할 때 최대 문서 수를 지정하지 않으면 문서 수에 제한이 없습니다.

복제본 세트의 멤버 수입니다.

복제본 세트에는 최대 50명의 구성원이 포함될 수 있습니다.

복제본 세트의 투표 구성원 수

복제본 세트에는 최대 7명의 투표 멤버가 있을 수 있습니다. 총 복제본 세트가 7명을 초과하는 멤버로 구성된 경우 투표권이 없는 멤버를 참조하세요.

자동 생성되는 Oplog의 최대 크기

oplog 크기를 명시적으로 지정하지 않으면(예:oplogSizeMB 또는 ) MongoDB 기가바이트보다 크지 않은 --oplogSize oplog 50 생성합니다. []1

[1] 2}가 삭제되는 것을 방지하기 위해 oplog가 구성된 크기 제한을 초과하여 커질 수 majority commit point 있습니다.
샤드 환경에서 사용할 수 없는 작업

$where$where 함수에서 db 객체에 대한 참조를 허용하지 않습니다. 비 샤드형 컬렉션에서는 이런 일이 흔하지 않습니다.

샤딩된 클러스터에서 처리되는 쿼리

mongos에서 실행하는 경우 인덱스는 인덱스에 샤드 키가 포함된 경우에만 샤딩된 컬렉션에 대한 쿼리를 처리할 수 있습니다.

샤드된 컬렉션의 단일 문서 수정 작업

justOne 또는 multi: false 옵션을 지정하는 분할된 컬렉션에 대해 updateremove() 작업 사용 방법:

  • 하나의 샤드만 대상으로 하는 경우 쿼리 사양에서 부분 샤드 키를 사용할 수 있습니다.

  • 쿼리 사양에서 샤드 키 또는 _id 필드를 제공할 수 있습니다.

샤드된 컬렉션의 고유 인덱스

고유 인덱스에 전체 샤드 키가 인덱스의 접두사로 포함된 경우를 제외하고, MongoDB는 샤드 간 고유 인덱스를 지원하지 않습니다. 이러한 상황에서 MongoDB는 단일 필드가 아닌 전체 키에 고유성을 적용합니다.

참조:

마이그레이션할 범위당 최대 문서 수

기본적으로 MongoDB는 범위 내의 문서 수가 구성된 범위 크기를 평균 문서 크기로 나눈 결과의 2배보다 크면 범위를 이동할 수 없습니다. MongoDB가 청크의 하위 범위를 이동하여 크기를 그 이하로 줄일 수 있는 경우, 밸런서는 범위를 마이그레이션하는 방식으로 이를 수행합니다. db.collection.stats()에는 컬렉션의 avgObjSize 평균 문서 크기를 나타내는 필드가 포함되어 있습니다.

너무 커서 마이그레이션할 수 없는 청크의 경우:

  • 밸런서 설정 attemptToBalanceJumboChunks를 사용하면 청크에 점보 레이블이 지정되지 않은 한 밸런서가 이동하기에는 너무 큰 청크를 마이그레이션할 수 있습니다. 자세한 내용은 크기 제한을 초과하는 밸런스 범위를 참조하십시오.

    moveRangemoveChunk 명령을 발행할 때, forceJumbo 옵션을 지정하여 너무 커서 이동할 수 없는 범위의 마이그레이션을 허용할 수 있습니다. 범위는 점보로 표시되거나 표시되지 않을 수 있습니다.

샤드 키 인덱스 유형

샤드 키 인덱스는 샤드 키의 오름차순 인덱스, 샤드 키로 시작하여 샤드 키의 오름차순을 지정하는 복합 인덱스 또는 해시 인덱스가 될 수 있습니다.

샤드 키 인덱스는 다음과 같을 수 없습니다.

샤드 키 선택

샤드 키 변경 옵션은 실행 중인 MongoDB 버전에 따라 다릅니다.

단조롭게 증가하는 샤드 키로 인해 삽입 처리량이 제한될 수 있음

삽입량이 많은 클러스터의 경우 키가 단조롭게 증가하거나 감소하는 샤드 키가 삽입 처리량에 영향을 미칠 수 있습니다. 샤드 키가 _id 필드인 경우 _id 필드의 기본값은 일반적으로 값이 증가하는 ObjectID라는 점에 유의하세요.

샤드 키가 단조롭게 증가하는 문서를 삽입할 때, 모든 삽입은 단일 샤드의 동일한 청크에 속합니다. 결국 시스템은 모든 쓰기 작업을 수신하는 청크 범위를 나누고 데이터를 더 균등하게 분배하기 위해 콘텐츠를 마이그레이션합니다. 그러나 클러스터는 언제든지 단일 샤드에만 삽입 작업을 지시하므로 삽입 처리량 병목 현상이 발생합니다.

클러스터 작업이 주로 읽기 작업 및 업데이트인 경우 이 제한은 클러스터에 영향을 미치지 않을 수 있습니다.

이 제약을 피하려면 해시된 샤드 키를 사용하거나 단조롭게 증가하거나 감소하지 않는 필드를 선택하세요.

해시된 샤드 키해시된 인덱스는 키 해시를 오름차순으로 저장합니다.

정렬 작업

MongoDB 인덱스 또는 인덱스를 사용하여 정렬 순서를 가져올 수 없는 경우 MongoDB 데이터에 대해 메모리 내 정렬 작업을 수행해야 합니다.

정렬 및 인덱스 사용에 대한 자세한 내용은 정렬 및 인덱스 사용을 참조하세요.

집계 파이프라인 단계

MongoDB는 단일 파이프라인에서 허용되는 집계 파이프라인 단계 수를 1000개로 제한합니다.

집계 파이프라인이 구문 분석 전후에 단계 제한을 초과하면 오류가 발생합니다.

집계 파이프라인 메모리

MongoDB 6.0부터 allowDiskUseByDefault 매개변수는 실행에 100메가바이트 이상의 메모리가 필요한 파이프라인 단계에서 기본적으로 디스크에 임시 파일 쓰기를 수행할지 여부를 제어합니다.

  • allowDiskUseByDefaulttrue로 설정하면 실행하는 데 100메가바이트 이상의 메모리가 필요한 파이프라인 단계에서는 기본적으로 임시 파일을 디스크에 씁니다. { allowDiskUse: false } 옵션을 사용하여 특정 find 또는 aggregate 명령에 대해 디스크에 임시 파일 쓰기를 비활성화할 수 있습니다.

  • allowDiskUseByDefaultfalse로 설정하면 실행하는 데 100메가바이트 이상의 메모리가 필요한 파이프라인 단계는 기본적으로 오류가 발생합니다. { allowDiskUse: true } 옵션을 사용하여 특정 find 또는 aggregate에 대한 임시 파일을 디스크에 쓸 수 있도록 설정할 수 있습니다.

$search 집계 단계는 별도의 프로세스에서 실행되므로 100 메가바이트의 RAM으로 제한되지 않습니다.

허용 디스크 사용true일 때 디스크에 임시 파일을 쓸 수 있는 단계의 예시는 다음과 같습니다.

참고

파이프라인 단계는 각 파이프라인 단계가 문서를 가져와 처리한 후 결과 문서를 출력하는 문서 스트림에서 작동합니다.

일부 단계에서는 들어오는 문서를 모두 처리할 때까지 문서를 출력할 수 없습니다. 이러한 파이프라인 단계는 들어오는 모든 문서가 처리될 때까지 단계 출력을 RAM에 보관해야 합니다. 따라서 이러한 파이프라인 단계에는 100MB 제한보다 더 많은 공간이 필요할 수 있습니다.

$sort 파이프라인 단계 중 하나의 결과가 한도를 초과하는 경우 $limit 단계를 추가하는 것을 고려하세요.

프로파일러 로그 메시지진단 로그 메시지에는 메모리 제한으로 인해 집계 단계에서 임시 파일에 데이터를 쓴 경우 usedDisk 표시기가 포함됩니다.

집계 및 읽기 관심사
2D 지리 공간적 쿼리에서는 $or 연산자를 사용할 수 없습니다.
지리공간 쿼리

구형 데이터에 대한 쿼리에 2d 인덱스를 사용하면 잘못된 결과 또는 오류가 반환될 수 있습니다. 예를 들어, 2d 인덱스는 극점을 감싸는 구형 쿼리를 지원하지 않습니다.

지리 공간적 좌표
  • 유효한 경도 값은 -180~180입니다(둘 모두 포함).

  • 유효한 위도 값은 -90~90입니다(둘 모두 포함).

GeoJSON 다각형의 면적

$geoIntersects 또는 $geoWithin의 경우 단일 반구보다 큰 면적을 가진 단일 고리 다각형을 지정하는 경우 $geometry 표현식에 사용자 지정 MongoDB 좌표 참조 시스템을 포함하세요. 그렇지 않으면 $geoIntersects 또는 $geoWithin은 보완 지오메트리를 쿼리합니다. 반구보다 큰 면적을 가진 다른 모든 GeoJSON 다각형의 경우, $geoIntersects 또는 $geoWithin으로 보완 도형을 쿼리합니다.

다중 문서 트랜잭션

다중 문서 트랜잭션의 경우:

  • 트랜잭션에서 컬렉션과 인덱스를 생성할 수 있습니다. 자세한 내용은 트랜잭션에서 컬렉션 및 인덱스 생성하기를 참조하세요

  • 트랜잭션에 사용되는 컬렉션은 서로 다른 데이터베이스에 있을 수 있습니다.

    참고

    샤드 간 쓰기 트랜잭션에서는 새 컬렉션을 생성할 수 없습니다. 예를 들어, 하나의 샤드에서 기존 컬렉션에 쓰고 다른 샤드에서 암시적으로 새 컬렉션을 생성하는 경우, MongoDB는 동일한 트랜잭션에서 두 작업을 모두 수행할 수 없습니다.

  • 제한된 컬렉션에는 쓸 (write) 수 없습니다.

  • 고정 사이즈 컬렉션에서 읽을 때는 읽기 고려 "snapshot"을 사용할 수 없습니다. (MongoDB 5.0부터 도입됨)

  • config, admin 또는 local 데이터베이스의 컬렉션을 읽고 쓸 수 없습니다.

  • system.* 컬렉션에 쓸 수 없습니다.

  • explain 또는 이와 유사한 명령을 사용하여 지원되는 작업의 쿼리 계획을 반환할 수 없습니다.

  • 트랜잭션 외부에서 생성된 커서의 경우 트랜잭션 내부에서 getMore을(를) 호출할 수 없습니다.

  • 트랜잭션에서 생성된 커서의 경우 트랜잭션 외부에서 getMore를 호출할 수 없습니다.

  • 명령을 트랜잭션 의 killCursors 첫 번째 작업으로 지정할 수 없습니다.

    또한 트랜잭션 내에서 killCursors 명령을 실행 하면 서버 가 지정된 커서를 즉시 중지합니다. 트랜잭션 이 커밋 될 때까지 기다리지 않습니다.

트랜잭션에서 허용되지 않는 작업은 다음과 같습니다.

  • 다중 샤드 쓰기 트랜잭션에서 새로운 컬렉션을 생성하기. 예를 들어 하나의 샤드에서 기존 컬렉션에 쓰고 다른 샤드에 암시적으로 컬렉션을 생성하는 경우 MongoDB는 동일한 트랜잭션에서 두 작업을 모두 수행할 수 없습니다.

  • 컬렉션(예: db.createCollection() 메서드) 및 인덱스(예: db.collection.createIndexes()db.collection.createIndex() 메서드)의 생성"local" 이외의 읽기 고려 수준을 사용하는 경우 명시합니다.

  • listCollections 2} 및 명령과 해당 도우미 메서드.listIndexes

  • createUser, getParameter, count 등과 해당 헬퍼와 같은 기타 비 CRUD 및 비 정보 작업입니다.

  • 병렬 작업. 여러 네임스페이스를 동시에 업데이트하려면 bulkWrite 명령을 사용하는 것이 좋습니다.

거래에는 transactionLifetimeLimitSeconds에 명시된 바와 같이 평생 제한이 있습니다. 기본값은 60초입니다.

쓰기 명령 배치 제한 크기

운전자 처리하다 할 수 있는 쓰기 (write) 작업의 양에는 제한이 100 000 없습니다. 드라이버는 maxWriteBatchSize(,)에 따라 데이터를 배치로 100 000 그룹화하며 수정할 수 없습니다. 배치 에 개 이상의 작업이 포함된 경우 250 000 운전자 배치 를 maxWriteBatchSize 이하의 작은 그룹으로 나눕니다. 예시 들어 100 연산에,000 연산이 포함된 50 경우 운전자 연산이 있는 배치 2개, 연산이 있는 배치 2개와 연산이 있는 배치000 하나를 생성합니다.

조회수

보기 정의 pipeline에는 $out 또는 $merge 단계를 포함할 수 없습니다. 이 제한은 $lookup 단계 또는 $facet 단계에서 사용되는 파이프라인과 같은 임베디드 파이프라인에도 적용됩니다.

보기에는 다음과 같은 작업 제한이 있습니다.

프로젝션 제한 사항
``$``-접두사 필드 경로 제한

find() findAndModify() 및 프로젝션 $ DBRef 필드를제외하고 로 시작하는 필드 프로젝트 할 수 없습니다.

예를 들어 다음 연산은 유효하지 않습니다.

db.inventory.find( {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } )
``$`` 위치 연산자 배치 제한

$ 프로젝션 연산자는 필드 경로 끝에만 나타날 수 있습니다(예: "field.$" 또는 "fieldA.fieldB.$").

예를 들어 다음 연산은 유효하지 않습니다.

db.inventory.find( { }, { "instock.$.qty": 1 } )

이 문제를 해결하려면 $ 투영 연산자 뒤에 오는 필드 경로의 구성요소를 제거합니다.

빈 필드 이름 프로젝션 제한

find()findAndModify() 프로젝션 빈 필드 이름의 프로젝션 포함할 수 없습니다.

예를 들어 다음 연산은 유효하지 않습니다.

db.inventory.find( { }, { "": 0 } )

이전 버전에서 MongoDB는 빈 필드의 포함/제외를 존재하지 않는 필드의 프로젝션과 동일하게 처리합니다.

경로 충돌: 내장된 문서 및 해당 필드

내장된 문서의 필드와 함께 내장된 문서를 프로젝션할 수 없습니다.

예를 들어,inventory size 필드가 포함된 문서가 있는 collection을 고려해 보십시오.

{ ..., size: { h: 10, w: 15.25, uom: "cm" }, ... }

다음 작업은 size 문서와 size.uom 필드를 모두 프로젝트하려고 하기 때문에 실패하며 Path collision 오류를 반환합니다.

db.inventory.find( {}, { size: 1, "size.uom": 1 } )

이전 버전에서는 내장된 문서와 해당 필드 사이의 마지막 프로젝션이 프로젝션을 결정합니다.

  • 내장된 문서의 프로젝션이 해당 필드의 모든 프로젝션 다음에 오는 경우 MongoDB는 내장된 문서를 프로젝트합니다. 예를 들어 프로젝션 문서 { "size.uom": 1, size: 1 }은 프로젝션 문서 { size: 1 }과 동일한 결과를 생성합니다.

  • 내장된 문서의 프로젝션이 해당 필드의 프로젝션보다 먼저 오면 MongoDB는 지정된 필드를 프로젝트합니다. 예를 들어 프로젝션 문서 { "size.uom": 1, size: 1, "size.h": 1 }은 프로젝션 문서 { "size.uom": 1, "size.h": 1 }과 동일한 결과를 생성합니다.

경로 충돌: 배열 및 임베디드 필드의 ``$slice``

find() 및 프로젝션 배열 의 와 배열 findAndModify() $slice 에 포함된 필드 모두 포함할 수 없습니다.

예를 들어 배열 필드 instock이 포함된 collection inventory 을 생각해 보겠습니다.

{ ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], ... }

Path collision 오류와 함께 다음 작업이 실패합니다.

db.inventory.find( {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } )

이전 버전에서 프로젝션은 두 프로젝션을 모두 적용하고 instock 배열의 첫 번째 요소($slice: 1)를 반환하지만 프로젝션된 요소에서 warehouse 필드를 억제합니다. MongoDB 4.4부터는 동일한 결과를 얻으려면 $project 로 구성된 db.collection.aggregate() 메서드를 사용하십시오.

``$`` 위치 연산자 및 ``$slice`` 제한

find()findAndModify() $slice 프로젝션 프로젝션 표현식 의 일부로 프로젝션 표현식 포함할 수 $ 없습니다.

예를 들어 다음 연산은 유효하지 않습니다.

db.inventory.find( { "instock.qty": { $gt: 25 } }, { "instock.$": { $slice: 1 } } )

이전 버전에서 MongoDB는 쿼리 조건과 일치하는 instock 배열의 첫 번째 요소 (instock.$)를 반환합니다. 즉, 위치 프로젝션 "instock.$" 이(가) 우선하고 $slice:1 은(는) 작동하지 않습니다. "instock.$": { $slice: 1 } 은(는) 다른 문서 필드를 제외하지 않습니다.

세션 및 $external 사용자 이름 제한

$external 인증 사용자(Kerberos, LDAP 또는 X.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10KB보다 클 수 없습니다.

세션 유휴 시간 초과

30 분 동안 읽기 또는 쓰기 (write) 작업이 없거나refreshSessions를 사용하여 새로 고치지 않은 세션은 만료된 것으로 표시되며 MongoDB 서버 에서 닫을 수 있습니다. 세션을 닫으면 진행 중인 모든 작업이 종료되고noCursorTimeout()또는 30 분보다 큰maxTimeMS()로 구성된 작업을 포함하여 커서가 열립니다.

장기 실행 커서 작업

분 이상 유휴 상태일 수 있는 커서 반환하는 30 작업의 경우 를 사용하여 명시적 세션 내에서 작업을 Mongo.startSession() 실행하고 를 사용하여 세션을 주기적으로 새로 고칩니다. 예시 들면 다음과 refreshSessions 같습니다.

var session = db.getMongo().startSession()
var sessionId = session
sessionId // show the sessionId
var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout()
var refreshTimestamp = new Date() // take note of time at operation start
while (cursor.hasNext()) {
// Check if more than 5 minutes have passed since the last refresh
if ( (new Date()-refreshTimestamp)/1000 > 300 ) {
print("refreshing session")
db.adminCommand({"refreshSessions" : [sessionId]})
refreshTimestamp = new Date()
}
// process cursor normally
}

이 예시 refreshSessions 5 분마다 를 사용하여 분의 30유휴 시간 제한을 방지합니다. 커서 무기한 열린 상태로 유지됩니다.

MongoDB 드라이버의 경우 세션 생성에 대한 운전자 설명서를 참조하세요.

다음 한도는 MongoDB Atlas에서 호스팅되는 배포에만 적용됩니다. 이러한 한도 중 하나라도 사용자의 조직에 문제가 된다면 Atlas 지원팀에 문의하세요.

구성 요소
Limit

12

단일 리전 클러스터의 샤드

70

멀티 리전 클러스터를 위한 리전 간 네트워크 권한

  1. 또한 프로젝트 의 클러스터 개 이상의 리전에 걸쳐 있는 40 경우 이 프로젝트 에서 멀티 리전 클러스터 만들 수 없습니다.

복제본 세트 또는 샤드당 투표 가능 노드

7

config 서버클러스터 계층(최소 및 최대)

M30

MongoDB Atlas 클러스터 계층 및 클래스에 따라 동시 수신 연결을 제한합니다.

  • 연결 한도는 노드 별로 적용 .

  • 샤딩된 클러스터의 경우,mongos 라우터별로 한도가 적용 (라우터 수는 모든 샤드의 복제본 세트 노드 수와 동일).

  • 읽기 설정 (read preference) 은 쿼리 당 할당된 총 연결에도 영향을 줍니다.

클러스터 계층에 대한 연결 한도:

참고

MongoDB Atlas는 MongoDB Atlas 서비스를 지원하기 위해 각 클러스터에 대한 소수의 연결을 예약합니다.

비공개 연결을 통해 멀티클라우드 MongoDB Atlas 배포서버 에 연결하는 경우, 연결 중인 동일한 cloud 제공자 의 노드에만 액세스 할 수 있습니다. 이 cloud 제공자 해당 리전 에 프라이머리 노드 없을 수 있습니다. 이 경우 연결 문자열 에 세컨더리 읽기 설정 (read preference) 모드 지정합니다.

비공개 연결을 통해 현재 제공자 의 모든 노드에 액세스 하려면 나머지 cloud 제공자 각각에 대해 MongoDB Atlas 에 대한 VPN 또는 비공개 엔드포인트를 구성합니다.

MongoDB Atlas cluster 의 컬렉션 수에는 엄격한 제한이 없습니다. 그러나 컬렉션과 인덱스가 많을수록 성능이 저하됩니다. 컬렉션이 클수록 영향 도 커집니다.

클러스터 계층 별 권장 최대 컬렉션 및 인덱스 수:

클러스터 계층
권장 최대값

M10

5,000개의 컬렉션 및 인덱스

M20 / M30

10,000개의 컬렉션 및 인덱스

M40/+

100,000개의 컬렉션 및 인덱스

MongoDB Atlas 배포에는 다음과 같은 조직 및 프로젝트 한도가 있습니다.

구성 요소
Limit

100

500

조직 당 Atlas 사용자

500

조직 당 API 키

500

200

팀 사용자

250

프로젝트 당 팀

100

조직 당 팀

250

사용자당 팀

100

사용자당 조직

250

조직 간 구성당 연결된 조직

250

프로젝트 당 클러스터

25

조직 당 프로젝트

250

100

데이터베이스 사용자당 할당된 역할

100

조직 당 시간당 청구

$50

25

프로젝트 당 총 네트워크 피어링 연결

  1. 또한 MongoDB Atlas 프로젝트 대해 선택된 CIDR 차단 및 리전 기반으로 네트워크 피어링 연결당 노드 수를 제한합니다.

프로젝트 당 보류 중인 네트워크 피어링 연결

25

리전당 AWS Private Link 주소 지정 가능 대상

50

리전당 Azure PrivateLink 주소 지정 가능 대상

150

MongoDB Atlas 관리 글로벌 클러스터 프로젝트당 고유한 샤드 키

  1. 이는 Atlas-Managed Sharding을 사용하는 글로벌 클러스터에만 적용됩니다. 자체 관리형 샤딩이 있는 글로벌 클러스터의 프로젝트 당 고유 샤드 키 수에는 제한이 없습니다.

Free 프로젝트 당 클러스터

1

500

구성 요소
Limit

조직 당 Atlas 서비스 계정

200

200

서비스 계정당비밀

2

서비스 계정당 활성토큰

100

MongoDB Atlas는 다음 구성 요소 레이블에 대해 길이를 제한하고 ReGex 요구 사항을 적용합니다.

구성 요소
글자 수 제한
RegEx 패턴

클러스터 이름

64 []2

^([a-zA-Z0-9]([a-zA-Z0-9-]){0,21}(?<!-)([\w]{0,42}))$ [3]

프로젝트 이름

64

^[\p{L}\p{N}\-_.(),:&@+']{1,64}$ [4]

조직 이름

64

^[\p{L}\p{N}\-_.(),:&@+']{1,64}$ [4]

API 키 설명

250

[2] 피어링 전용 모드를 활성화한 경우 클러스터 이름 글자 수 제한은 23입니다.
[3] MongoDB Atlas는 클러스터 이름의 처음 23자를 사용합니다. 이러한 문자는 클러스터 프로젝트 내에서 고유해야 합니다. 23자 미만인 클러스터 이름의 마지막 문자는 하이픈(-)이 될 수 없습니다. 23자를 초과하는 클러스터 이름의 23번째 문자는 하이픈이 될 수 없습니다.
[4](1, 2) 조직 및 프로젝트 이름에는 유니코드 문자 또는 숫자와 문장 부호(-_.(),:&@+')를 포함할 수 있습니다.

MongoDB Atlas 무료 클러스터 및 Flex 클러스터에는 추가 제한 사항이 적용 . 자세한 학습 은 다음을 참조하세요.

일부 MongoDB 명령은 MongoDB Atlas에서 지원되지 않습니다. 또한 일부 명령은 MongoDB Atlas 무료 클러스터에서만 지원됩니다. 자세한 내용은 다음을 참조하세요.

돌아가기

로그 메시지

이 페이지의 내용