db.createCollection()
정의
db.createCollection(name, options)
새 컬렉션 또는 보기 를 만듭니다. 뷰에 대해서는
db.createView()
도 참조하세요.MongoDB는 명령에서 컬렉션을 처음 참조할 때 컬렉션을 암시적으로 생성하므로 이 메서드는 주로 특정 옵션을 사용하는 새 컬렉션을 만드는 데 사용됩니다. 예를 들어
db.createCollection()
를 사용하여 고정 사이즈 컬렉션 을 만들거나 문서 유효성 검사를 사용하는 새 컬렉션을 만들 수 있습니다.db.createCollection()
은(는) 데이터베이스 명령create
을(를) 감싸는 래퍼입니다.
호환성
다음 환경에서 호스팅되는 배포에 db.createCollection()
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
db.createCollection()
메서드의 프로토타입 형식은 다음과 같습니다.
db.createCollection( <name>, { capped: <boolean>, timeseries: { // Added in MongoDB 5.0 timeField: <string>, // required for time series collections metaField: <string>, granularity: <string> }, expireAfterSeconds: <number>, clusteredIndex: <document>, // Added in MongoDB 5.3 changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0 size: <number>, max: <number>, storageEngine: <document>, validator: <document>, validationLevel: <string>, validationAction: <string>, indexOptionDefaults: <document>, viewOn: <string>, pipeline: <pipeline>, collation: <document>, writeConcern: <document> } )
db.createCollection()
메서드에는 다음과 같은 매개변수가 있습니다.
Parameter | 유형 | 설명 |
---|---|---|
name | 문자열 | 생성할 collection의 이름입니다. 이름 지정 제한 사항을 참조하세요. |
options | 문서 | 선택 사항입니다. 다음을 생성하기 위한 구성 옵션입니다.
|
options
문서에 다음과 같은 필드가 있습니다:
필드 | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
capped | 부울 | |||||||||||
timeseries.timeField | 문자열 | time series 컬렉션을 만들 때 필요합니다. 각 time-series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 timeField 의 값으로 유효한 BSON 날짜가 있어야 합니다. | ||||||||||
timeseries.metaField | 문자열 | 선택 사항입니다. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다. 지정한 필드의 이름이 | ||||||||||
timeseries.granularity | 문자열 | 선택사항.
세분 수준 및 버킷 간격에 대한 자세한 내용은 Time Series 데이터의 세부 수준 설정을 참조하세요. | ||||||||||
expireAfterSeconds | 숫자 | 선택 사항. time series 컬렉션 의 문서가 만료되는 시간(초)을 지정합니다. MongoDB 는 만료된 문서를 자동으로 삭제합니다. | ||||||||||
size | 숫자 | 선택 사항. 고정 사이즈 컬렉션의 최대 크기를 바이트 단위로 지정합니다. 고정 사이즈 컬렉션이 최대 크기에 도달하면 MongoDB는 새 문서를 위한 공간을 확보하기 위해 이전 문서를 제거합니다. 고정 사이즈 컬렉션의 경우 size 필드는 필수이며 다른 컬렉션의 경우 무시됩니다. | ||||||||||
max | 숫자 | 선택 사항입니다. 고정 사이즈 컬렉션에 허용되는 최대 문서 수입니다. size 제한이 이 제한보다 우선합니다. 고정 사이즈 컬렉션이 최대 문서 수에 도달하기 전에 size 제한에 도달하면 MongoDB는 오래된 문서를 제거합니다. max 제한을 사용하는 것을 선호하는 경우, 고정 사이즈 컬렉션에 필요한 size 제한이 최대 문서 수를 포함하기에 충분한지 확인합니다. | ||||||||||
storageEngine | 문서 | 선택 사항. WiredTiger 스토리지 엔진에서만 사용할 수 있습니다. 사용자가 컬렉션을 생성할 때 컬렉션별로 스토리지 엔진에 대한 구성을 지정할 수 있습니다.
collection을 생성할 때 지정한 스토리지 엔진 구성은 다른 스토리지 엔진을 사용하는 멤버가 있는 복제본 세트를 지원하기 위해 복제 중에 유효성을 검사하고 oplog에 기록합니다. 자세한 내용은 스토리지 엔진 옵션 지정을 참조하세요. | ||||||||||
validator | 문서 | 선택 사항. 사용자가 컬렉션에 대한 유효성 검사 규칙 또는 표현식을 지정할 수 있습니다.
스키마 유효성 검사를 사용하여 컬렉션을 만드는 방법을 알아보려면 JSON schema 를 참조하세요. | ||||||||||
validationLevel | 문자열 | 선택 사항입니다. 업데이트 중에 MongoDB가 기존 문서에 유효성 검사 규칙을 얼마나 엄격하게 적용하는지 결정합니다.
| ||||||||||
validationAction | 문자열 | 선택 사항. 유효하지 않은 문서를 중요: 문서 유효성 검사는 | ||||||||||
indexOptionDefaults | 문서 | 선택 사항. 사용자가 컬렉션을 생성할 때 인덱스에 대한 기본 구성을 지정할 수 있습니다.
인덱스를 만들 때 지정한 스토리지 엔진 구성은 다른 스토리지 엔진을 사용하는 멤버가 있는 복제본 세트를 지원하기 위해 복제 중에 유효성이 검사되고 oplog에 기록됩니다. | ||||||||||
viewOn | 문자열 | 뷰를 생성할 소스 컬렉션 또는 뷰의 이름입니다. 자세한 내용은 db.createView() 를 참조하세요. | ||||||||||
pipeline | 배열 | 집계 파이프라인 단계로 구성된 배열입니다. db.createView() 는 지정된 pipeline 을 viewOn 컬렉션 또는 뷰에 적용하여 뷰를 만듭니다. 자세한 내용은 db.createView() 를 참조하세요. | ||||||||||
collation | 문서 | 컬렉션의 기본 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 컬렉션 수준에서 데이터 정렬을 지정하는 경우:
컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. collection의 경우 collection 생성 중에만 데이터 정렬을 지정할 수 있습니다. 일단 설정하면 collection의 기본 데이터 정렬을 수정할 수 없습니다. 예시는 데이터 정렬 지정을 참조하세요. | ||||||||||
writeConcern | 문서 | 선택 사항입니다. 작업에 대한 쓰기 고려를 표현하는 문서입니다. 기본값 쓰기 고려를 사용하려면 생략합니다. 샤딩된 클러스터에서 실행되는 경우 |
액세스 제어
배포서버에서 인증/권한 부여를 시행하는 경우 db.createCollection()
에 다음 권한이 필요합니다.
작업 | 필수 권한 |
---|---|
비고정 사이즈 컬렉션 생성하기 | 데이터베이스의
|
고정 사이즈 컬렉션 생성 |
|
뷰 만들기 |
그러나 사용자에게 데이터베이스에 대한 |
이 데이터베이스에 대해 readWrite
기본 제공 역할이 있는 사용자에게는 나열된 연산을 실행하는 데 필요한 권한이 있습니다. 필요한 역할이 있는 사용자 생성을 실행하거나 기존 사용자에게 역할 허용을 실행하세요.
행동
리소스 잠금
버전 4.2에서 변경되었습니다.
db.createCollection()
은 작업 기간에 지정된 컬렉션 또는 뷰에 대한 배타적 잠금을 얻습니다. 컬렉션에 이루어진 모든 후속 작업은 반드시 db.createCollection()
이 잠금을 해제할 때까지 기다려야 합니다. db.createCollection()
은 일반적으로 이 잠금을 짧은 시간 동안 유지합니다.
뷰를 만들려면 데이터베이스의 system.views
컬렉션에 대한 추가 배타 락을 얻어야 합니다. 이 잠금은 명령이 완료될 때까지 데이터베이스의 뷰 생성 또는 수정을 차단합니다.
MongoDB 4.2 이전 버전에서는 db.createCollection()
가 상위 데이터베이스에 대한 배타적 잠금을 획득하여 작업이 완료될 때까지 데이터베이스 및 모든 해당 컬렉션에 대한 모든 작업을 차단했습니다.
트랜잭션
버전 4.4에서 변경되었습니다.
트랜잭션이 교차 샤드 쓰기 트랜잭션(write transaction)인 이 아닌 경우 분산 트랜잭션 내에서 컬렉션과 인덱스를 생성할 수 있습니다.
트랜잭션에서 db.createCollection()
를 사용하려면 트랜잭션에서 읽기 고려 "local"
를 사용해야 합니다. "local"
이외의 읽기 고려 수준을 지정하면 트랜잭션이 실패합니다.
예시
고정 사이즈 컬렉션 생성
고정 사이즈 컬렉션에는 최대 크기 또는 문서 수가 정해져 있어 최대 임계값을 초과하여 늘어나는 것을 방지합니다. 모든 고정 사이즈 컬렉션은 최대 크기를 지정해야 하며 최대 문서 수를 지정할 수도 있습니다. MongoDB는 컬렉션이 최대 문서 수에 도달하기 전에 최대 크기 제한에 도달하는 경우 오래된 문서를 제거합니다. 다음 예시를 고려하세요.
db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )
이 명령은 최대 크기가 5메가바이트이고 최대 문서 수가 5000개인 log
라는 이름의 컬렉션을 만듭니다.
고정 사이즈 컬렉션에 대한 자세한 내용은 고정 사이즈 컬렉션을 참조하세요.
Time Series 컬렉션 만들기
지난 24시간 동안의 날씨 데이터를 캡처하는 time series 컬렉션을 생성하려면 다음 명령을 실행합니다.
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "data", granularity: "hours" }, expireAfterSeconds: 86400 } )
문서 유효성 검사로 컬렉션 만들기
유효성 검사가 포함된 컬렉션은 삽입되거나 업데이트된 각 문서를 validator
옵션에 지정된 기준과 비교합니다. validationLevel
및 validationAction
에 따라 MongoDB는 경고를 반환하거나 지정된 기준을 충족하지 못하는 경우 문서 삽입 또는 업데이트를 거부합니다.
다음 예에서는 JSON schema 유효성 검사기를 사용하여 contacts
컬렉션을 만듭니다.
db.createCollection( "contacts", { validator: { $jsonSchema: { bsonType: "object", required: [ "phone" ], properties: { phone: { bsonType: "string", description: "must be a string and is required" }, email: { bsonType : "string", pattern : "@mongodb\.com$", description: "must be a string and match the regular expression pattern" }, status: { enum: [ "Unknown", "Incomplete" ], description: "can only be one of the enum values" } } } } } )
유효성 검사기가 제자리에 있으면 다음 삽입 작업이 유효성 검사 에 실패합니다.
db.contacts.insertOne( { name: "Amanda", status: "Updated" } )
이 메서드는 다음 오류를 반환합니다.
Uncaught: MongoServerError: Document failed validation Additional information: { failingDocumentId: ObjectId("61a8f4847a818411619e952e"), details: { operatorName: '$jsonSchema', schemaRulesNotSatisfied: [ { operatorName: 'properties', propertiesNotSatisfied: [ { propertyName: 'status', description: 'can only be one of the enum values', details: [ [Object] ] } ] }, { operatorName: 'required', specifiedAs: { required: [ 'phone' ] }, missingProperties: [ 'phone' ] } ] } }
컬렉션의 유효성 검사 사양을 보려면 db.getCollectionInfos()
를 사용합니다.
데이터 정렬 지정
버전 3.4에 새로 추가되었습니다.
데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.
데이터 정렬은 collection 또는 보기 수준에서 지정할 수 있습니다. 예를 들어 다음 연산은 collection에 대한 데이터 정렬을 지정하여 collection을 만듭니다(데이터 정렬 필드에 대한 설명은 데이터 정렬 문서 참조).
db.createCollection( "myColl", { collation: { locale: "fr" } } );
이 데이터 정렬은 다른 데이터 정렬을 명시적으로 지정하지 않는 한 데이터 정렬을 지원하는 인덱스 및 작업에서 사용됩니다. 예를 들어 myColl
에 다음 문서를 삽입합니다.
{ _id: 1, category: "café" } { _id: 2, category: "cafe" } { _id: 3, category: "cafE" }
다음 작업은 컬렉션의 데이터 정렬을 사용합니다.
db.myColl.find().sort( { category: 1 } )
이 작업은 다음 순서로 문서를 반환합니다.
{ "_id" : 2, "category" : "cafe" } { "_id" : 3, "category" : "cafE" } { "_id" : 1, "category" : "café" }
단순 이진 데이터 정렬을 사용하는 collection에 대한 동일한 작업(즉, 특정 데이터 정렬 세트 없음)은 다음 순서로 문서를 반환합니다.
{ "_id" : 3, "category" : "cafE" } { "_id" : 2, "category" : "cafe" } { "_id" : 1, "category" : "café" }
스토리지 엔진 옵션 지정하기
으로 db.createCollection()
컬렉션을 생성할 때 컬렉션별 구성 옵션을 지정할 수 있습니다.storage engine 다음 작업을 고려하세요.
db.createCollection( "users", { storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } } )
이 작업은 MongoDB가 wiredTiger
스토리지 엔진에 전달할 특정 구성 문자열을 사용하여 users
라는 새 collection을 생성합니다.
예를 들어, users
collection의 파일 블록에 zlib
압축기를 지정하려면 다음 명령을 사용하여 block_compressor
옵션을 설정합니다.
db.createCollection( "users", { storageEngine: { wiredTiger: { configString: "block_compressor=zlib" } } } )