MongoDB 확장 JSON(v1)
중요
명확화
다음 페이지에서는 MongoDB 확장 JSON v1 (레거시 확장 JSON)에 대해 설명합니다. MongoDB 확장 JSON v2 에 대한 설명은 MongoDB 확장 JSON (v2)을 참조하세요.
mongo
에서 지원되는 데이터 유형은 mongosh 데이터 유형을 참조하세요.
JSON 은 BSON 에서 지원하는 유형의 하위 집합만 나타낼 수 있습니다. 유형 정보를 보존하기 위해 MongoDB는 JSON 형식에 다음 확장을 추가합니다.
엄격한 모드. BSON types의 엄격한 모드 표현은 JSON RFC 을 준수합니다. . 모든 JSON 구문 분석기는 이러한 엄격 모드 표현을 키/값 쌍으로 구문 분석할 수 있습니다. 그러나 MongoDB 내부 JSON 구문 분석기만 형식이 전달하는 유형 정보를 인식합니다.
mongo
shell 모드. MongoDB 내부 JSON 구문 분석기와mongo
shell이 이 모드를 구문 분석할 수 있습니다.
다양한 데이터 유형에 사용되는 표현은 JSON이 구문 분석되는 컨텍스트에 따라 달라집니다.
MongoDB 확장 JSON v1 및 MongoDB 드라이버
다음 드라이버는 확장 JSON v1.0 를 사용합니다. (레거시)
C#
Ruby
다른 드라이버에 대해서는 MongoDB 확장 JSON(v2)을 참조하세요.
구문 분석기 및 지원되는 형식
엄격 모드에서 입력
다음은 유형 정보 를 인식하여 엄격 모드에서 표현을 구문 분석할 수 있습니다.
mongoimport
버전 4.0--query
다양한 MongoDB 도구 옵션
JSON mongo
shell 을 포함한 다른 구문 분석기는 엄격 모드 표현을 키/값 쌍으로 구문 분석할 수 있지만 유형 정보 를 인식하지 못합니다.
mongo
셸 모드에서 입력
다음은 유형 정보 를 인식하여 모드에서 표현을 구문 분석할 수 있습니다.mongo
shell
mongoimport
버전 4.0--query
다양한 MongoDB 도구 옵션mongo
Shell
엄격 모드에서 출력
4.2 이전 버전에서는 mongoexport
가 MongoDB Extended JSON v1 의 Strict 모드 로 데이터를 출력합니다.
셸 모드에서출력 mongo
버전 4.2 이전에는 bsondump
가 mongo
shell 모드 에서 출력됩니다.
BSON 데이터 유형 및 관련 표현
다음은 BSON 엄격 모드 및 mongo
shell 모드 에서 데이터 유형과 관련 표현을 제공합니다.
바이너리
data_binary
- 엄격한 모드
mongo
shell 모드{ "$binary": "<bindata>", "$type": "<t>" } BinData ( <t>, <bindata> )
여기서 값은 다음과 같습니다.
<bindata>
바이너리 string 의 기본64 표현입니다.<t>
데이터 유형을 나타내는 단일 바이트를 나타냅니다. Strict 모드 에서는 16진수 string 이고 shell 모드 에서는 정수입니다. 확장 BSON 문서를 참조하세요. http://bsonspec.org/spec.html
날짜
data_date
- 엄격한 모드
mongo
shell 모드{ "$date": "<date>" } new Date ( <date> ) 엄격 모드 에서
<date>
은 템플릿YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>
뒤에 필수 시간대 필드가 있는 ISO-8601 날짜 형식입니다.shell 모드 에서
<date>
은(는) 에포크 UTC 이후의 밀리초 수를 제공하는 64비트 부호 있는 정수의 JSON 표현입니다.
타임스탬프
data_timestamp
- 엄격한 모드
mongo
shell 모드{ "$timestamp": { "t": <t>, "i": <i> } } Timestamp( <t>, <i> )
여기서 값은 다음과 같습니다.
<t>
는 에포크 이후 초 동안의 32비트 부호 없는 정수의 JSON 표현입니다.<i>
는 증분에 대한 32비트 부호 없는 정수입니다.
정규 표현식
data_regex
- 엄격한 모드
mongo
shell 모드{ "$regex": "<sRegex>", "$options": "<sOptions>" } /<jRegex>/<jOptions>
여기서 값은 다음과 같습니다.
<sRegex>
유효한 string JSON 문자의 입니다.<jRegex>
은(는) 유효한 JSON 문자와 이스케이프되지 않은 큰따옴표("
) 문자를 포함할 수 있는 문자열이지만 이스케이프되지 않은 슬래시(/
) 문자는 포함할 수 없습니다.<sOptions>
알파벳 문자로 표시되는 정규식 옵션이 포함된 string 입니다.<jOptions>
'g', 'i', 'm' 및 's'(v1.9에 추가됨) 문자만 포함할 수 있는 문자열입니다.JavaScript
및mongo Shell
표현은 제한된 옵션 범위를 지원하므로 이 표현으로 변환할 때 적합하지 않은 옵션은 모두 삭제됩니다.
oid
data_oid
- 엄격한 모드
mongo
shell 모드{ "$oid": "<id>" } ObjectId( "<id>" )
여기서 값은 다음과 같습니다.
<id>
24자 16진수 string 입니다.
DB 참조
data_ref
- 엄격한 모드
mongo
shell 모드{ "$ref": "<name>", "$id": "<id>" } DBRef("<name>", "<id>")
여기서 값은 다음과 같습니다.
<name>
유효한 string JSON 문자의 입니다.<id>
모든 유효한 확장 JSON 유형입니다.
정의되지 않은 유형
data_undefined
- 엄격한 모드
mongo
shell 모드{ "$undefined": true } undefined JavaScript/BSON 정의되지 않은 유형에 대한 표현입니다.
쿼리 문서에는
undefined
를 사용할 수 없습니다 . 레거시mongo
shell 을 사용하여people
컬렉션에 삽입된 다음 문서를 가정해 보겠습니다.db.people.insertOne( { name : "Sally", age : undefined } ) 다음 쿼리는 오류를 반환합니다.
db.people.find( { age : undefined } ) db.people.find( { age : { $gte : undefined } } ) 그러나 다음과 같이
$type
를 사용하여 정의되지 않은 값을 쿼리할 수 있습니다.db.people.find( { age : { $type : 6 } } ) 이 쿼리는
age
필드에undefined
값이 있는 모든 문서를 반환합니다.중요
정의되지 않은 BSON 유형은 더 이상 사용되지 않습니다. .
mongosh
는 대신 null 값을 저장합니다.예를 들어, 동일한 코드를 사용하여
mongosh
및 레거시mongo
shell 에 문서를 삽입합니다.db.people.insertOne( { name : "Sally", age : undefined } ) 결과 문서는 다음과 같이 다릅니다.
{ "name" : "Sally", "age" : null } { "name" : "Sally", "age" : undefined }
최소 키
data_minkey
- 엄격한 모드
mongo
shell 모드{ "$minKey": 1 } MinKey 다른 모든 유형보다 낮게 비교되는 MinKey BSON 데이터 유형의 표현입니다. BSON types의 비교 순서에 대한 자세한 내용은 Comparison/Sort Order 를 참조하세요.
최대 키
data_maxkey
- 엄격한 모드
mongo
shell 모드{ "$maxKey": 1 } MaxKey 다른 모든 유형보다 높게 비교되는 MaxKey BSON 데이터 유형의 표현입니다. BSON types의 비교 순서에 대한 자세한 내용은 Comparison/Sort Order 를 참조하세요.
NumberLong
data_numberlong
- 엄격한 모드
mongo
shell 모드{ "$numberLong": "<number>" } NumberLong( "<number>" ) NumberLong
부호 있는 64비트 정수입니다. 레거시mongo
shell에서는 따옴표를 사용하여NumberLong
을(를) 삽입해야 하며 그렇지 않으면 작업에서 오류가 발생합니다.예를 들어, 다음 명령은 정수 값 주위에 따옴표를 사용하거나 사용하지 않고
9223372036854775807
을NumberLong
로 삽입하려고 시도합니다.db.json.insertOne( { longQuoted : NumberLong("9223372036854775807") } ) db.json.insertOne( { longUnQuoted : NumberLong(9223372036854775807) } ) 강조 표시된 줄은 레거시
mongo
shell 에서 오류를 생성합니다.mongosh
에서 삽입이 성공합니다.
NumberDecimal
data_numberdecimal
- 엄격한 모드
mongo
shell 모드{ "$numberDecimal": "<number>" } NumberDecimal( "<number>" ) NumberDecimal
는 고정밀 소수점 입니다. . 따옴표를 포함하지 않으면 입력된 숫자가 큰따옴표로 처리되어 데이터가 손실될 수 있습니다.예를 들어, 다음 명령은 값 주위에 따옴표를 사용하거나 사용하지 않고
123.40
을NumberDecimal
로 삽입합니다.db.json.insertOne( { decimalQuoted : NumberDecimal("123.40") } ) db.json.insertOne( { decimalUnQuoted : NumberDecimal(123.40) } ) 문서를 검색할 때
decimalUnQuoted
값은 변경되었지만decimalQuoted
은 지정된 정밀도를 유지합니다.db.json.find() { "_id" : ObjectId("596f88b7b613bb04f80a1ea9"), "decimalQuoted" : NumberDecimal("123.40") } { "_id" : ObjectId("596f88c9b613bb04f80a1eaa"), "decimalUnQuoted" : NumberDecimal("123.400000000000") } 중요
이 삽입 동작은
mongosh
에서 다릅니다.따옴표로 묶인 string 형식인
NumberDecimal("123.40")
은 더 이상 사용되지 않습니다. 삽입은 성공하지만 경고도 발생합니다.따옴표로 묶지 않은 string 형식
NumberDecimal(123.40)
은 값을123.4
로 저장합니다. 후행0
가 삭제됩니다.