문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

콜모드

이 페이지의 내용

  • 정의
  • 옵션
  • 액세스 제어
  • 행동
  • 예제
collMod

collMod 를 사용하면 컬렉션에 옵션을 추가하거나 보기 정의를 수정할 수 있습니다.

mongosh 에서 이 명령은 hideIndex()unhideIndex() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 않을 수 있습니다. 편의가 필요하지 않거나 추가 반환 필드가 필요한 경우 database 명령을 사용합니다.

참고

이 명령으로 수정된 뷰는 구체화된 뷰를 참조하지 않습니다. 온디맨드 구체화된 보기에 대한 설명은 $merge 대신 참조하세요.

이 명령은 다음과 같은 프로토타입 형식을 취합니다.

참고

MongoDB 4.2부터

  • collMod 명령에 대한 noPaddingusePowerOf2Sizes MMAPv1 옵션이 제거되었습니다.

  • 뷰 정의 pipeline 에는 $out 또는 $merge 단계를 포함할 수 없습니다. 뷰 정의에 중첩된 파이프라인이 포함된 경우(예: 뷰 정의에 $lookup 또는 $facet 단계가 포함된 경우) 이 제한은 중첩된 파이프라인에도 적용됩니다.

db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )

<collection or view>에 현재 데이터베이스에 있는 컬렉션 또는 뷰의 이름을 지정합니다.

index

index 옵션은 기존 인덱스의 다음 속성을 변경할 수 있습니다.

인덱스 속성
설명
expireAfterSeconds

TTL 컬렉션의 만료 임계값을 결정하는 시간(초)입니다.

성공하면 명령은 변경된 속성에 대한 이전 값과 새 값 expireAfterSeconds_oldexpireAfterSeconds_new)이 모두 포함된 문서를 반환합니다.

기존 TTL 인덱스만 수정할 수 있습니다. 즉, 기존 expireAfterSeconds 속성이 있는 인덱스입니다. 인덱스에 기존 expireAfterSeconds 속성이 없으면 no expireAfterSeconds field to update 가 발생하면서 작업 오류가 발생합니다.

인덱스 옵션 expireAfterSeconds를 수정하면 인덱스의 $indexStats가 재설정됩니다.

MongoDB 5.0 이전에 생성된 TTL 인덱스를 사용하거나 MongDB 5.0에서 생성된 데이터를 5.0 이전 설치와 동기화하려는 경우 잘못된 구성 문제를 방지하려면 NaN을 사용하여 구성된 인덱스를 참조하세요.

TTL 인덱스 expireAfterSeconds 값은 02147483647 사이여야 합니다.

hidden

쿼리 플래너에서 인덱스를 숨길지 여부를 결정하는 부울입니다.

hidden 값이 변경되면 명령은 변경된 속성에 대한 이전 값(hidden_old)과 새 값(hidden_new)이 모두 포함된 문서를 반환합니다.

그러나 hidden 값이 변경되지 않은 경우(즉 이미 숨겨진 인덱스를 숨기거나 이미 숨기지 않은 인덱스를 숨기지 않는 경우), 이 명령은 출력에서 hidden_oldhidden_new 필드를 생략합니다.

인덱스를 숨기려면 featureCompatibilityVersion4.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
}
} )

인덱스가 존재하지 않으면 "cannot find index <name|keyPattern> for ns <db.collection>" 메시지와 함께 명령에 오류가 발생합니다.

validator

버전 3.2에 새로 추가되었습니다.

validator 를 사용하면 사용자가 컬렉션에 대한 유효성 검사 규칙 또는 표현식 을 지정할 수 있습니다. 자세한 내용은 스키마 유효성 검사를 참조하세요.

validator 옵션은 유효성 검사 규칙 또는 표현식을 지정하는 문서를 사용합니다. $near, $nearSphere, $text, $where을(를) 제외하고 쿼리 연산자와 동일한 연산자를 사용하여 표현식을 지정할 수 있습니다.

참고

  • 유효성 검사는 업데이트 및 삽입 중에 수행됩니다. 기존 문서는 수정될 때까지 유효성 검사를 거치지 않습니다.

  • admin, localconfig 데이터베이스의 컬렉션에는 유효성 검사기를 지정할 수 없습니다.

  • system.* 컬렉션에 대한 유효성 검사기를 지정할 수 없습니다.

validationLevel

버전 3.2에 새로 추가되었습니다.

validationLevel 는 MongoDB가 업데이트 중에 기존 문서에 유효성 검사 규칙을 얼마나 엄격하게 적용하는지 결정합니다.

validationLevel
설명
"off"
삽입 또는 업데이트에 대한 유효성 검사가 없습니다.
"strict"
기본값 모든 삽입 및 모든 업데이트에 유효성 검사 규칙을 적용합니다.
"moderate"
기존의 유효한 문서에 대한 삽입 및 업데이트에 유효성 검사 규칙을 적용합니다. 기존의 유효하지 않은 문서에 대한 업데이트에는 규칙을 적용하지 마세요.
validationAction

버전 3.2에 새로 추가되었습니다.

validationAction 옵션은 유효하지 않은 문서에 대해 error 처리할지, 아니면 유효하지 않은 문서를 허용하되 위반 사항에 대해 warn 처리할지 여부를 결정합니다.

중요

문서 유효성 검사는 validationLevel에 의해 결정된 문서에만 적용됩니다.

validationAction
설명
"error"
기본값 문서는 쓰기가 발생하기 전에 유효성 검사를 통과해야 합니다. 이를 통과하지 못하면 쓰기 작업이 실패합니다.
"warn"
문서가 유효성 검사를 통과할 필요는 없습니다. 문서가 유효성 검사에 실패하면 쓰기 작업은 유효성 검사 실패를 기록합니다.

collection의 유효성 검사 사양을 보려면 db.getCollectionInfos() 메서드를 사용합니다.

참고

이 명령으로 수정된 뷰는 구체화된 뷰를 참조하지 않습니다. 온디맨드 구체화된 보기에 대한 설명은 $merge 대신 참조하세요.

viewOn

뷰의 기본 소스 컬렉션 또는 입니다. 뷰 정의는 지정된 pipeline 를 이 소스에 적용하여 결정됩니다.

액세스 제어를 사용하여 실행 중인 MongoDB deployment에서 보기를 수정하는 경우 반드시 필요합니다.

pipeline

를 정의하는 aggregation pipeline입니다.

참고

뷰 정의 pipeline 에는 $out 또는 $merge 단계를 포함할 수 없습니다. 뷰 정의에 중첩된 파이프라인이 포함된 경우(예: 뷰 정의에 $lookup 또는 $facet 단계가 포함된 경우) 이 제한은 중첩된 파이프라인에도 적용됩니다.

액세스 제어를 사용하여 실행 중인 MongoDB deployment에서 보기를 수정하는 경우 반드시 필요합니다.

뷰 정의는 공개입니다. 즉, 뷰에 대한 db.getCollectionInfos()explain 작업에는 뷰를 정의하는 파이프라인이 포함됩니다. 따라서 뷰 정의에 민감한 필드와 값을 직접 참조하지 않는 것이 좋습니다.

db.runCommand( {
collMod: "myView",
viewOn: "activities",
pipeline: [
{ $match: { status: "Q" } },
{ $project: { user: 1, date: 1, description: 1} } ]
} )

문서 자동 제거를 활성화하거나 기존 time series 컬렉션expireAfterSeconds 매개변수 값을 변경하려면 다음 collMod 명령을 실행합니다.

db.runCommand({
collMod: <collection>,
expireAfterSeconds: <Number> || "off"
})

expireAfterSeconds 필드는 다음 중 하나여야 합니다.

  • 음수가 아닌 십진수(>=0)

  • 문자열 "off".

숫자는 문서가 만료되기 전까지의 시간(초)을 지정합니다. "off" 문자열은 expireAfterSeconds 매개변수를 제거하고 자동 제거를 비활성화합니다.

comment

선택 사항. 이 명령에 댓글을 첨부할 수 있습니다. 댓글은 최상위 필드여야 하며 유효한 모든 BSON types일 수 있습니다. 지정한 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.

w

선택 사항. collMod명령의 쓰기 관련 사항을 표현하는 문서입니다.

기본 쓰기 고려를 사용하지 않으려면 생략합니다.

배포에서 인증/권한 부여를 시행하는 경우 collMod 명령을 실행하려면 다음 권한이 있어야 합니다.

작업
필수 권한
미고정 사이즈 컬렉션 수정
collMod 데이터베이스
뷰 수정

collMod 데이터베이스에서 다음 중 하나를 수행합니다.

  • 수정할 뷰에 find없거나

  • 수정할 뷰의 find와 소스 컬렉션/뷰의 find를 모두 입력합니다.

기본 제공 역할 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 }

참고

인덱스를 숨기려면 featureCompatibilityVersion5.0 이상으로 설정해야 합니다.

다음 예시는 orders 컬렉션의 기존 인덱스를 숨깁니다. 특히 이 작업은 쿼리 플래너에서 사양 { shippedDate: 1 }인 인덱스를 숨깁니다.

db.runCommand({
collMod: "orders",
index: {
keyPattern: { shippedDate: 1 },
hidden: true
}
})

작업이 성공하면 변경된 속성의 이전 값과 새 값이 모두 포함된 문서를 반환합니다.

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

참고

작업은 성공했지만 hidden 값이 변경되지 않은 경우(즉, 이미 숨겨진 인덱스를 숨기거나 이미 숨기지 않은 인덱스를 숨기지 않는 경우), 이 명령은 출력에서 hidden_oldhidden_new 필드를 생략합니다.

텍스트 인덱스를 숨기려면 keyPattern가 아닌 name으로 인덱스를 지정해야 합니다.

다음 예에서는 contacts 이라는 기존 collection에 유효성 검사기를 추가합니다.

참고

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" } )

그러나 validationActionwarn 전용이므로 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" }

자세한 내용은 스키마 유효성 검사를 참조하세요.

← cloneCollectionAsCapped