문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / / /

$jsonSchema

이 페이지의 내용

  • 정의
  • 행동
  • 예제
  • JSON Schema
$jsonSchema

$jsonSchema 연산자는 지정된 JSON Schema를 충족하는 문서와 일치합니다.

$jsonSchema 연산자 표현식의 구문은 다음과 같습니다.

{ $jsonSchema: <JSON Schema object> }

여기서 JSON Schema 객체의 형식 은 4 JSON Schema 표준 의 초안 에 따라 지정됩니다. .

{ <keyword1>: <value1>, ... }

예를 들면 다음과 같습니다.

{
$jsonSchema: {
required: [ "name", "major", "gpa", "address" ],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
address: {
bsonType: "object",
required: [ "zipcode" ],
properties: {
"street": { bsonType: "string" },
"zipcode": { bsonType: "string" }
}
}
}
}
}

MongoDB에서 지원하는 키워드 목록은 사용 가능한 키워드를 참조하세요.

참고

MongoDB 4 JSON schema는 핵심 사양 을 포함하여 의 초안을 지원합니다. 및 유효성 검사 사양, 몇 가지 차이점이 있습니다. 자세한 내용은 확장생략 을 참조하세요.

에 대한 JSON schema 자세한 내용은 공식 웹사이트 를 참조하세요. .

$jsonSchema 사용하려면featureCompatibilityVersion을 이상으로 설정해야 합니다. "3.6"

문서 유효성 검사기에서 $jsonSchema 를 사용하여 삽입 및 업데이트 작업에 지정된 스키마를 적용할 수 있습니다.

db.createCollection( <collection>, { validator: { $jsonSchema: <schema> } } )
db.runCommand( { collMod: <collection>, validator:{ $jsonSchema: <schema> } } )

읽기 및 쓰기 작업에 대한 쿼리 조건에서 $jsonSchema 을(를) 사용하여 컬렉션에서 지정된 스키마를 충족하는 문서를 찾을 수 있습니다.

db.collection.find( { $jsonSchema: <schema> } )
db.collection.aggregate( [ { $match: { $jsonSchema: <schema> } } ] )
db.collection.updateMany( { $jsonSchema: <schema> }, <update> )
db.collection.deleteOne( { $jsonSchema: <schema> } )

컬렉션에서 지정된 스키마를 충족하지 않는 $jsonSchema 문서를 찾으려면 표현식에 표현식을 $nor 사용합니다. 예를 들면 다음과 같습니다.

db.collection.find( { $nor: [ { $jsonSchema: <schema> } ] } )
db.collection.aggregate( [ { $match: { $nor: [ { $jsonSchema: <schema> } ] } }, ... ] )
db.collection.updateMany( { $nor: [ { $jsonSchema: <schema> } ] }, <update> )
db.collection.deleteOne( { $nor: [ { $jsonSchema: <schema> } ] } )

다음 db.createCollection() 메서드는 students 이라는 컬렉션을 생성하고 $jsonSchema 연산자를 사용하여 스키마 유효성 검사 규칙을 설정합니다.

db.createCollection("students", {
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "name", "year", "major", "address" ],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
year: {
bsonType: "int",
minimum: 2017,
maximum: 3017,
description: "must be an integer in [ 2017, 3017 ] and is required"
},
major: {
enum: [ "Math", "English", "Computer Science", "History", null ],
description: "can only be one of the enum values and is required"
},
gpa: {
bsonType: [ "double" ],
description: "must be a double if the field exists"
},
address: {
bsonType: "object",
required: [ "city" ],
properties: {
street: {
bsonType: "string",
description: "must be a string if the field exists"
},
city: {
bsonType: "string",
"description": "must be a string and is required"
}
}
}
}
}
}
} )

컬렉션에 대해 생성된 validator 가 주어지면 validatordouble 이 필요한 경우 gpa 이 정수이기 때문에 다음 삽입 작업이 실패합니다.

db.students.insertOne( {
name: "Alice",
year: Int32( 2019 ),
major: "History",
gpa: Int32( 3 ),
address: {
city: "NYC",
street: "33rd Street"
}
} )

이 작업은 다음 오류를 반환합니다.

MongoServerError: Document failed validation
Additional information: {
failingDocumentId: ObjectId("61aa577f666a50a8fccd7ec2"),
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'gpa',
description: 'must be a double if the field exists',
details: [ [Object] ]
}
]
}
]
}
}

gpa 을(를) double로 변경하면 삽입이 성공합니다.

db.students.insertOne( {
name: "Alice",
year: NumberInt(2019),
major: "History",
gpa: Double(3.0),
address: {
city: "NYC",
street: "33rd Street"
}
} )

읽기 및 쓰기 작업에 대한 쿼리 조건에서 $jsonSchema 를 사용하여 컬렉션에서 지정된 스키마를 충족하는 문서를 찾을 수 있습니다.

예를 들어 다음 문서를 사용하여 샘플 컬렉션 inventory 을 만듭니다.

db.inventory.insertMany( [
{ item: "journal", qty: NumberInt(25), size: { h: 14, w: 21, uom: "cm" }, instock: true },
{ item: "notebook", qty: NumberInt(50), size: { h: 8.5, w: 11, uom: "in" }, instock: true },
{ item: "paper", qty: NumberInt(100), size: { h: 8.5, w: 11, uom: "in" }, instock: 1 },
{ item: "planner", qty: NumberInt(75), size: { h: 22.85, w: 30, uom: "cm" }, instock: 1 },
{ item: "postcard", qty: NumberInt(45), size: { h: 10, w: 15.25, uom: "cm" }, instock: true },
{ item: "apple", qty: NumberInt(45), status: "A", instock: true },
{ item: "pears", qty: NumberInt(50), status: "A", instock: true }
] )

다음으로, 다음 샘플 스키마 객체를 정의합니다.

let myschema = {
required: [ "item", "qty", "instock" ],
properties: {
item: { bsonType: "string" },
qty: { bsonType: "int" },
size: {
bsonType: "object",
required: [ "uom" ],
properties: {
uom: { bsonType: "string" },
h: { bsonType: "double" },
w: { bsonType: "double" }
}
},
instock: { bsonType: "bool" }
}
}

$jsonSchema 를 사용하여 스키마를 충족하는 컬렉션의 모든 문서를 찾을 수 있습니다.

db.inventory.find( { $jsonSchema: myschema } )
db.inventory.aggregate( [ { $match: { $jsonSchema: myschema } } ] )

$jsonSchema$nor }와 함께 사용하여 스키마를 충족하지 않는 모든 문서를 찾을 수 있습니다.

db.inventory.find( { $nor: [ { $jsonSchema: myschema } ] } )

또는 스키마를 충족하지 않는 모든 문서를 업데이트할 수 있습니다.

db.inventory.updateMany( { $nor: [ { $jsonSchema: myschema } ] }, { $set: { isValid: false } } )

또는 스키마를 충족하지 않는 모든 문서를 삭제할 수 있습니다.

db.inventory.deleteMany( { $nor: [ { $jsonSchema: myschema } ] } )

MongoDB 4 JSON schema는 핵심 사양 을 포함하여 의 초안을 지원합니다. 및 유효성 검사 사양, 몇 가지 차이점이 있습니다. 자세한 내용은 확장생략 을 참조하세요.

에 대한 JSON schema 자세한 내용은 공식 웹사이트 를 참조하세요. .

참고

MongoDB는 JSON Schema에서 사용할 수 있는 키워드의 하위 세트를 구현합니다. 누락된 항목의 전체 목록은 누락 항목을 참조하세요.

키워드
유형
정의
행동
bsonType
모든 유형
문자열 별칭 또는 문자열 별칭 배열
$type 연산자에 사용된 것과 동일한 문자열 별칭을 허용합니다.
열거형
모든 유형
값 배열
필드의 사용 가능한 값을 모두 열거합니다.
유형
모든 유형
문자열 또는 고유 문자열 배열

필드의 사용 가능한 JSON 유형을 열거합니다. 사용 가능한 유형은 "객체", "배열", "숫자", "부울", "문자열", "null"입니다.

MongoDB의 JSON 스키마 구현 기능은 "정수" 유형을 지원하지 않습니다. 대신 bsonType 키워드와 "int" 유형 또는 "long" 유형을 사용하세요.

allOf
모든 유형
JSON 스키마 객체 배열
필드가 지정된 모든 스키마와 일치해야 합니다.
anyOf
모든 유형
JSON 스키마 객체 배열
필드가 지정된 스키마 중 1개 이상과 일치해야 합니다.
oneOf
모든 유형
JSON 스키마 객체 배열
필드가 지정된 스키마 중 1개와 정확히 일치해야 합니다.
not
모든 유형
JSON 스키마 객체
필드가 스키마와 일치하지 않아야 합니다.
multipleOf
숫자
숫자
필드가 이 값의 배수여야 합니다.
maximum
숫자
숫자
필드의 최댓값을 나타냅니다.
exclusiveMaximum
숫자
부울
true(참)이고 필드가 숫자인 경우 maximum은(는) 배타적 최댓값이 됩니다. 그렇지 않은 경우에는 포괄적 최댓값이 됩니다.
minimum
숫자
숫자
필드의 최솟값을 나타냅니다.
exclusiveMinimum
숫자
부울
true(참)인 경우 minimum은(는) 배타적 최솟값입니다. 그렇지 않은 경우에는 포괄적 최솟값이 됩니다.
maxLength
strings
integer
필드의 최대 길이를 나타냅니다.
minLength
strings
integer
필드의 최소 길이를 나타냅니다.
패턴
strings
정규 표현식이 포함된 문자열
필드가 정규 표현식과 일치해야 합니다.
maxProperties
개체
integer
필드의 최대 속성 수를 나타냅니다.
minProperties
개체
integer
필드의 최소 속성 수를 나타냅니다.
필수
개체
고유 문자열 배열
배열에 지정된 모든 요소가 객체의 속성 세트에 포함되어야 합니다.
additionalProperties
개체
부울 또는 객체

true(이)면 추가 필드를 사용할 수 있습니다. false(이)면 그렇지 않습니다. 유효한 JSON 스키마 객체가 지정된 경우에는 추가 필드에서 해당 스키마를 대상으로 유효성을 검사해야 합니다.

기본값은 true입니다.

속성
개체
객체
각 값이 유효한 JSON 스키마 객체이기도 한 유효한 JSON 스키마입니다.
patternProperties
개체
객체
properties 요건 외에도 이 객체의 각 속성 이름이 유효한 정규 표현식이어야 합니다.
종속성
개체
객체
필드 또는 스키마 종속성을 설명합니다.
additionalItems
배열
부울 또는 객체
객체인 경우 유효한 JSON 스키마여야 합니다.
항목
배열
객체 또는 배열
유효한 JSON 스키마이거나 유효한 JSON 스키마의 배열이어야 합니다.
maxItems
배열
integer
배열의 최대 길이를 나타냅니다.
minItems
배열
integer
배열의 최소 길이를 나타냅니다.
uniqueItems
배열
부울
true(참)인 경우 배열의 각 항목은 고유해야 합니다. 그렇지 않은 경우에는 고유성 제약 조건이 적용되지 않습니다.
제목
N/A
문자열
효과가 없는 서술형 제목 문자열입니다.
description
N/A
문자열
스키마를 설명하며 효과가 없는 문자열입니다.

의 구현에는 $jsonSchema 연산자의 모든 types를 사용할 BSON MongoDB JSON schema 수 있는 bsonType 키워드 추가가 포함됩니다. 는 연산자에 $type 사용된 것과bsonType 동일한 별칭을 허용합니다.string

MongoDB의 JSON 스키마 구현 기능은 다음을 지원하지 않습니다.

  • JSON schema 사양 초안 4의 하이퍼텍스트 정의

  • 키워드:

    • $ref

    • $schema

    • default

    • definitions

    • format

    • id

  • integer 유형입니다. BSON 유형 int 또는 long은(는) bsonType 키워드와 함께 사용해야 합니다.

  • JSON 스키마(JSON 참고 자료 및 JSON 포인터 사용 등)의 하이퍼미디어 속성 및 연결 속성입니다.

  • 알 수 없는 키워드입니다.

돌아가기

$expr

다음

$mod

이 페이지의 내용