콜모드
정의
collMod
collMod
를 사용하면 컬렉션에 옵션을 추가하거나 보기 정의를 수정할 수 있습니다.팁
mongosh
에서 이 명령은hideIndex()
및unhideIndex()
도우미 메서드를 통해 실행할 수도 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.참고
이 명령으로 수정된 뷰는 구체화된 뷰를 참조하지 않습니다. 온디맨드 구체화된 보기에 대한 설명은
$merge
를 대신 참조하세요.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 대한 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
참고
MongoDB 4.2부터
db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )
<collection or view>
에 현재 데이터베이스에 있는 컬렉션 또는 뷰의 이름을 지정합니다.
옵션
인덱스 옵션
index
index
옵션은 기존 인덱스의 다음 속성을 변경할 수 있습니다.인덱스 속성설명expireAfterSeconds
TTL 컬렉션의 만료 임계값을 결정하는 시간(초)입니다.
성공하면 명령은 변경된 속성에 대한 이전 값과 새 값
expireAfterSeconds_old
및expireAfterSeconds_new
)이 모두 포함된 문서를 반환합니다.기존 TTL 인덱스 만 수정할 수 있습니다. 즉, 기존
expireAfterSeconds
속성 이 있는 인덱스 입니다. 인덱스 에 기존expireAfterSeconds
속성 이 없으면no expireAfterSeconds field to update
작업이 오류를 발생시킵니다.인덱스 옵션
expireAfterSeconds
를 수정하면 인덱스의$indexStats
가 재설정됩니다.MongoDB 5.0 이전에 생성된 TTL 인덱스를 사용하거나 MongDB 5.0에서 생성된 데이터를 5.0 이전 설치와 동기화하려는 경우 잘못된 구성 문제를 방지하려면 NaN을 사용하여 구성된 인덱스를 참조하세요.
TTL 인덱스
expireAfterSeconds
값은0
과2147483647
사이여야 합니다.hidden
쿼리 플래너에서 인덱스를 숨길지 여부를 결정하는 부울입니다.
hidden
값이 변경되면 명령은 변경된 속성에 대한 이전 값(hidden_old
)과 새 값(hidden_new
)이 모두 포함된 문서를 반환합니다.그러나
hidden
값이 변경되지 않은 경우(즉 이미 숨겨진 인덱스를 숨기거나 이미 숨기지 않은 인덱스를 숨기지 않는 경우), 이 명령은 출력에서hidden_old
및hidden_new
필드를 생략합니다.인덱스를 숨기려면 featureCompatibilityVersion을
4.4
이상으로 설정해야 합니다.인덱스 옵션
hidden
을 수정하면 값이 변경되는 경우 인덱스의$indexStats
가 재설정됩니다.인덱스 옵션을 변경하려면 기존 인덱스의 키 패턴 또는 이름과 변경하려는 인덱스 옵션 중 하나를 지정합니다.
db.runCommand( { collMod: <collection>, index: { keyPattern: <index_spec> || name: <index_name>, expireAfterSeconds: <number>, // If changing the TTL expiration threshold hidden: <boolean> // If changing the visibility of the index from the query planner } } )
문서 유효성 검사
validator
버전 3.2에 새로 추가되었습니다.
validator
를 사용하면 사용자가 컬렉션 에 대한 유효성 검사 규칙 또는 표현식 을 지정할 수 있습니다. 자세한 내용은 스키마 유효성 검사 를 참조하세요.validator
옵션은 유효성 검사 규칙 또는 표현식을 지정하는 문서를 사용합니다.$near
,$nearSphere
,$text
,$where
을(를) 제외하고 쿼리 연산자와 동일한 연산자를 사용하여 표현식을 지정할 수 있습니다.참고
유효성 검사는 업데이트 및 삽입 중에 수행됩니다. 기존 문서는 수정될 때까지 유효성 검사를 거치지 않습니다.
admin
,local
및config
데이터베이스의 컬렉션에는 유효성 검사기를 지정할 수 없습니다.system.*
컬렉션에 대한 유효성 검사기를 지정할 수 없습니다.
validationLevel
버전 3.2에 새로 추가되었습니다.
validationLevel
는 MongoDB 가 업데이트 중에 기존 문서에 유효성 검사 규칙을 얼마나 엄격하게 적용하는지 결정합니다."off"
- 삽입 또는 업데이트에 대한 유효성 검사가 없습니다.
"strict"
- 기본값 모든 삽입 및 모든 업데이트에 유효성 검사 규칙을 적용합니다.
"moderate"
- 기존의 유효한 문서에 대한 삽입 및 업데이트에 유효성 검사 규칙을 적용합니다. 기존의 유효하지 않은 문서에 대한 업데이트에는 규칙을 적용하지 마세요.
validationAction
버전 3.2에 새로 추가되었습니다.
validationAction
옵션은 유효하지 않은 문서에 대해error
처리할지, 아니면 유효하지 않은 문서를 허용하되 위반 사항에 대해warn
처리할지 여부를 결정합니다.중요
문서 유효성 검사는
validationLevel
에 의해 결정된 문서에만 적용됩니다."error"
- 기본값 문서는 쓰기가 발생하기 전에 유효성 검사를 통과해야 합니다. 이를 통과하지 못하면 쓰기 작업이 실패합니다.
"warn"
- 문서가 유효성 검사를 통과할 필요는 없습니다. 문서가 유효성 검사에 실패하면 쓰기 작업은 유효성 검사 실패를 기록합니다.
collection의 유효성 검사 사양을 보려면 db.getCollectionInfos()
메서드를 사용합니다.
조회수
참고
이 명령으로 수정된 뷰는 구체화된 뷰를 참조하지 않습니다. 온디맨드 구체화된 보기에 대한 설명은 $merge
를 대신 참조하세요.
viewOn
뷰의 기본 소스 컬렉션 또는 뷰 입니다. 뷰 정의는 지정된
pipeline
를 이 소스에 적용하여 결정됩니다.액세스 제어를 사용하여 실행 중인 MongoDB deployment에서 보기를 수정하는 경우 반드시 필요합니다.
pipeline
참고
액세스 제어를 사용하여 실행 중인 MongoDB deployment에서 보기를 수정하는 경우 반드시 필요합니다.
뷰 정의는 공개입니다. 즉, 뷰에 대한
db.getCollectionInfos()
및explain
작업에는 뷰를 정의하는 파이프라인이 포함됩니다. 따라서 뷰 정의에 민감한 필드와 값을 직접 참조하지 않는 것이 좋습니다.
db.runCommand( { collMod: "myView", viewOn: "activities", pipeline: [ { $match: { status: "Q" } }, { $project: { user: 1, date: 1, description: 1} } ] } )
Time Series 컬렉션
문서 자동 제거를 활성화 하거나 기존 time series 컬렉션 의 expireAfterSeconds
매개변수 값을 변경하려면 다음 collMod
명령을 실행합니다.
db.runCommand({ collMod: <collection>, expireAfterSeconds: <Number> || "off" })
expireAfterSeconds
필드는 다음 중 하나여야 합니다.
음수가 아닌 십진수(
>=0
)문자열
"off"
.
숫자는 문서가 만료되기 전까지의 시간(초)을 지정합니다. "off"
문자열은 expireAfterSeconds
매개변수를 제거하고 자동 제거를 비활성화합니다.
댓글 첨부
선택 사항. 이 명령에 댓글을 첨부할 수 있습니다. 댓글은 최상위 필드여야 하며 유효한 모든 BSON types일 수 있습니다. 지정한 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
mongod 로그 메시지(
attr.command.cursor.comment
필드).데이터베이스 프로파일러 출력의
command.comment
필드에 있습니다.currentOp
{command.comment
5} 필드에 출력을 입력합니다.
쓰기 고려
선택 사항. collMod
명령의 쓰기 관련 사항을 표현하는 문서입니다.
기본 쓰기 고려를 사용하지 않으려면 생략합니다.
액세스 제어
배포서버 에서 인증/ 권한 부여 를 시행하는 경우 collMod
명령을 실행 하려면 다음 권한 이 있어야 합니다.
작업 | 필수 권한 |
---|---|
미고정 사이즈 컬렉션 수정 | collMod 데이터베이스 |
뷰 수정 |
기본 제공 역할 dbAdmin
은 이러한 권한을 제공합니다.
행동
리소스 잠금
collMod
명령은 작업 기간 동안 지정된 컬렉션에 대한 컬렉션 잠금을 가져옵니다.
예시
인덱스의 만료 값 변경
다음 예시에서는 이름이 user_log
인 컬렉션에서 기존 TTL 인덱스 { lastAccess: 1 }
의 expireAfterSeconds
속성을 업데이트합니다. 인덱스의 현재 expireAfterSeconds
속성은 1800
초(또는 30분)로 설정되어 있으며 이 예시에서 값을 3600
초(또는 60분)로 변경합니다.
db.runCommand({ collMod: "user_log", index: { keyPattern: { lastAccess: 1 }, expireAfterSeconds: 3600 } })
작업이 성공하면 변경된 속성의 이전 값과 새 값이 모두 포함된 문서를 반환합니다.
{ "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }
쿼리 플래너에서 인덱스 숨기기
참고
인덱스를 숨기려면 featureCompatibilityVersion을 5.0
이상으로 설정해야 합니다.
다음 예시는 orders
컬렉션의 기존 인덱스를 숨깁니다. 특히 이 작업은 쿼리 플래너에서 사양 { shippedDate: 1 }
인 인덱스를 숨깁니다.
db.runCommand({ collMod: "orders", index: { keyPattern: { shippedDate: 1 }, hidden: true } })
작업이 성공하면 변경된 속성의 이전 값과 새 값이 모두 포함된 문서를 반환합니다.
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
참고
작업은 성공했지만 hidden
값이 변경되지 않은 경우(즉, 이미 숨겨진 인덱스를 숨기거나 이미 숨기지 않은 인덱스를 숨기지 않는 경우), 이 명령은 출력에서 hidden_old
및 hidden_new
필드를 생략합니다.
텍스트 인덱스를 숨기려면 keyPattern
가 아닌 name
으로 인덱스를 지정해야 합니다.
기존 컬렉션에 문서 유효성 검사 추가
다음 예에서는 contacts
이라는 기존 컬렉션에 유효성 검사기를 추가합니다.
참고
MongoDB 3.6 에서 $jsonSchema
연산자를 추가하여 JSON schema 유효성 검사를 지원합니다.
db.runCommand( { collMod: "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" } } } }, validationLevel: "moderate", validationAction: "warn" } )
moderate
validationLevel
를 사용하면 MongoDB는 유효성 검사 규칙을 적용하여 이미 유효성 검사 기준을 충족하는 기존 문서에 작업을 삽입하고 업데이트합니다. 유효성 검사 기준을 충족하지 않는 기존 문서에 대한 업데이트는 유효성을 검사하지 않습니다.
warn
validationAction
를 사용하면 MongoDB는 모든 위반 사항을 기록하지만 삽입 또는 업데이트가 계속 진행되도록 허용합니다.
예를 들어 다음 삽입 작업은 유효성 검사 규칙을 위반합니다.
db.contacts.insertOne( { name: "Amanda", status: "Updated" } )
그러나 validationAction
는 warn
전용이므로 MongoDB 는 유효성 검사 위반 메시지만 기록하고 작업 진행을 허용합니다.
2017-12-01T12:31:23.738-05:00 W STORAGE [conn1] Document would fail validation collection: example.contacts doc: { _id: ObjectId('5a2191ebacbbfc2bdc4dcffc'), name: "Amanda", status: "Updated" }
자세한 내용은 스키마 유효성 검사 를 참조하세요.