MongoDB 확장 JSON(v2)
중요
명확화
다음 페이지에서는 MongoDB 확장 JSON v2에 대해 설명합니다. 레거시 MongoDB 확장 JSON v1에 대한 논의는 MongoDB 확장 JSON(v1)을 참조하세요.
mongosh
에서 지원되는 데이터 유형은 mongosh 데이터 유형을 참조하세요.
JSON은 BSON에서 지원하는 유형의 하위 집합만 직접 나타낼 수 있습니다. 유형 정보를 보존하기 위해 MongoDB는 JSON 형식에 다음 확장을 추가합니다.
- 표준 모드
- 가독성과 상호 운용성을 포기하고 유형 보존을 강조하는 문자열 형식입니다. 즉, 정규에서 BSON으로 변환하면 일반적으로 특정 경우를 제외하고는 유형 정보를 보존합니다.
- 완화 모드
- 유형 보존을 포기하고 가독성과 상호 운용성을 강조하는 문자열 형식입니다. 즉, 완화된 형식에서 BSON으로 변환하면 유형 정보가 손실될 수 있습니다.
두 형식 모두 JSON RFC를 준수하며 다양한 MongoDB 드라이버 및 도구로 구문 분석될 수 있습니다.
MongoDB 확장 JSON v2 사용법
드라이버
다음 드라이버는 확장 JSON v2.0을 사용합니다.
|
|
|
레거시 MongoDB 확장 JSON v1을 사용하는 C# 및 Ruby의 경우 MongoDB Extended JSON (v1)을 참조하세요.
확장 JSON 메서드
MongoDB는 확장 JSON에 대해 다음과 같은 메서드를 제공합니다.
메서드 | 설명 | |
serialize | BSON 객체를 직렬화하여 데이터를 확장 JSON 형식으로 반환합니다.
| |
deserialize | 직렬화된 문서를 필드 및 값 쌍으로 변환합니다. 값은 BSON types를 가지고 있습니다.
| |
stringify | 역직렬화된 객체의 요소와 type 쌍을 문자열로 변환합니다.
| |
parse | 문자열을 요소와 type 쌍으로 변환합니다.
|
사용 예시는 아래의 확장 JSON 객체 변환을 참조하세요.
자세한 내용은 다음 문서를 참조하세요.
MongoDB Database Tools
버전 4.2부터:
바이너리 | 변경 사항 |
---|---|
확장 JSON v2.0(표준 모드) 형식을 사용합니다. | |
확장 JSON v2.0 사용 (Canonical 모드) 메타데이터의 형식입니다. 확장 JSON v2.0 을(를) 지원하는 일반적으로 | |
Creates output data in Extended JSON v2.0 (Relaxed mode) by
default. Creates output data in Extended JSON v2.0 (Canonical mode) if
used with --jsonFormat . | |
Expects import data to be in Extended JSON v2.0 (either
Relaxed or Canonical mode) by default. Can recognize data that is in Extended JSON v1.0 format if the option
--legacy is specified.일반적으로 |
BSON 데이터 유형 및 관련 표현
다음은 몇 가지 일반적인 BSON 데이터 유형과 표준과 완화 모드에서의 관련 표현입니다.
전체 목록은 여기에서 확인할 수 있습니다.
표준 | 완화 | ||
---|---|---|---|
|
|
배열 요소는 다음과 같습니다:
<elements>
배열 요소는 확장 JSON을 사용합니다.
빈 배열을 지정하려면
[ ]
내용을 생략합니다.
표준 | 완화 | |||||||
---|---|---|---|---|---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<payload>"
Base64로 인코딩된('=' 패딩 포함) 페이로드 문자열.
"<t>"
BSON 바이너리 하위 유형에 해당하는 1자리 또는 2자리의 16진수 문자열입니다. 사용 가능한 하위 유형에 대해서는 확장 bson 문서 http://bsonspec.org/spec.html을 참조하세요.
1970년에서 9999년 사이의 날짜:
표준 | 완화 | ||
---|---|---|---|
|
|
1970년 이전 또는 9999년 이후 날짜:
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<millis>"
부호 있는 64비트 정수(문자열)입니다. 이 값은 에포크를 기준으로 밀리초를 나타냅니다.
"<ISO-8601 Date/Time Format>"
문자열로 표현한 ISO-8601 인터넷 날짜/시간 형식의 날짜.
날짜/시간의 최대 시간 정밀도는 밀리초입니다.
분수 초는 분수 부분이 0이 아닌 경우 소수점 이하 3자리까지 정확하게 표시됩니다.
소수부가 0인 경우 소수 자릿수는 반드시 생략해야 합니다.
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<number>"
고정밀 십진수(문자열)입니다.
표준 | 완화 | ||
---|---|---|---|
|
|
문서 내용은 다음과 같습니다:
<content>
확장 JSON을 사용하는 이름:값 쌍입니다.
빈 문서를 지정하려면
{ }
내용을 생략하세요.
유한한 수의 경우:
표준 | 완화 | ||
---|---|---|---|
|
|
무한한 수 또는 NAN의 경우:
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<decimal string>"
부호 있는 64비트 부동소수점(문자열)입니다.
<non-integer number>
정수가 아닌 숫자입니다. 정수는 double이 아닌 정수로 구문 분석됩니다.
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<number>"
부호 있는 64비트 정수(문자열)입니다.
<integer>
부호 있는 64비트 정수입니다.
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<number>"
부호 있는 32비트 정수(문자열)입니다.
<integer>
부호 있는 32비트 정수입니다.
표준 | 완화 | ||
---|---|---|---|
|
|
MaxKey BSON 데이터 유형은 다른 모든 유형보다 높은 비교율을 보입니다. BSON types에 대한 비교 순서에 대한 자세한 내용은 Comparison/Sort Order를 참조하세요.
표준 | 완화 | ||
---|---|---|---|
|
|
MinKey BSON 데이터 유형은 비교 순위가 다른 모든 유형보다 낮습니다. BSON 유형의 비교 순서에 대한 자세한 내용은 비교/순서 정렬을 참조하세요.
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<ObjectId bytes>"
ObjectId 바이트를 나타내는 24자의 빅엔디안 16진수 문자열입니다.
표준 | 완화 | |||||||
---|---|---|---|---|---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
"<regexPattern>"
정규 표현식 패턴에 해당하는 문자열입니다. 문자열에는 유효한 JSON 문자와 이스케이프되지 않은 큰따옴표(
"
) 문자가 포함될 수 있지만 이스케이프되지 않은 슬래시(/
) 문자는 포함될 수 없습니다.
"<options>"
BSON 정규식 옵션을 지정하는 문자열입니다. 옵션을 알파벳 순서로 지정해야 합니다. 지원되는 옵션에 대한 자세한 내용은
$options
을 참조하세요.
표준 | 완화 | ||
---|---|---|---|
|
|
여기서 값은 다음과 같습니다.
<t>
에포크 이후 초에 대한 양의 정수입니다.
<i>
증분에 대한 양의 정수입니다.
예시
다음 예시에서는 확장 JSON 사용법을 보여 줍니다.
유형 표현
필드 이름 예시 | 표준 형식 | 편안한 형식 |
---|---|---|
"_id:" | {"$oid":"5d505646cf6d4fe581014ab2"} | {"$oid":"5d505646cf6d4fe581014ab2"} |
"arrayField": | ["hello",{"$numberInt":"10"}] | ["hello",10] |
"dateField": | {"$date":{"$numberLong":"1565546054692"}} | {"$date":"2019-08-11T17:54:14.692Z"} |
"dateBefore1970": | {"$date":{"$numberLong":"-1577923200000"}} | {"$date":{"$numberLong":"-1577923200000"}} |
"decimal128Field": | {"$numberDecimal":"10.99"} | {"$numberDecimal":"10.99"} |
"documentField": | {"a":"hello"} | {"a":"hello"} |
"doubleField": | {"$numberDouble":"10.5"} | 10.5 |
"infiniteNumber" | {"$numberDouble":"Infinity"} | {"$numberDouble":"Infinity"} |
"int32field": | {"$numberInt":"10"} | 10 |
"int64Field": | {"$numberLong":"50"} | 50 |
"minKeyField": | {"$minKey":1} | {"$minKey":1} |
"maxKeyField": | {"$maxKey":1} | {"$maxKey":1} |
"regexField": | {"$regularExpression":{"pattern":"^H","options":"i"}} | {"$regularExpression":{"pattern":"^H","options":"i"}} |
"timestampField": | {"$timestamp":{"t":1565545664,"i":1}} | {"$timestamp":{"t":1565545664,"i":1}} |
"uuid": | {"$uuid":"3b241101-e2bb-4255-8caf-4136c566a962"} | {"$uuid":"3b241101-e2bb-4255-8caf-4136c566a962"} |
확장된 JSON 객체 변환
아래의 간단한 예시에서는 문서 객체를 만든 후 확장된 JSON 객체 변환 방법을 사용해 객체를 다른 형식으로 변환합니다.
설정
conversions
컬렉션에 문서를 만듭니다.
db.conversions.insertOne( { insertDate: new Date() } )
mongosh
다음 문서 객체를 반환합니다.
{ acknowledged: true, insertedId: ObjectId("61fbaf25671c45f3f5f4074a") }
EJSON.serialize
MongoDB 문서 객체에 저장된 데이터를 직렬화합니다.
serialized = EJSON.serialize( db.conversions.findOne() )
mongosh
는 JavaScript 객체를 구문 분석하고 "$"
접두사가 붙은 유형을 사용하여 값을 반환합니다.
{ _id: { '$oid': '61fbaf25671c45f3f5f4074a' }, insertDate: { '$date': '2022-02-03T10:32:05.230Z' } }
EJSON.deserialize
직렬화된 객체를 역직렬화합니다.
EJSON.deserialize( serialized )
mongosh
(은)는 JavaScript 객체를 구문 분석하고 기본값 mongosh
유형 형식을 사용하여 값을 반환합니다.
{ _id: new ObjectId( "61fbaf25671c45f3f5f4074a" ), insertDate: ISODate( "2022-02-03T10:32:05.230Z" ) }
EJSON.stringify
객체를 문자열로 변환합니다.
stringified = EJSON.stringify( db.conversions.findOne() )
mongosh
은(는) 변환된 객체의 요소를 문자열로 출력합니다.
{ "_id": {"$oid":"61fbaf25671c45f3f5f4074a"}, "insertDate":{"$date":"2022-02-03T10:32:05.230Z"} }
EJSON.parse
문자열을 구문 분석하여 다음 객체를 생성합니다.
EJSON.parse( stringified )
mongosh
변환된 문자열을 문서로 반환합니다.
{ _id: new ObjectId("61fbaf25671c45f3f5f4074a"), insertDate: ISODate("2022-02-03T10:32:05.230Z") }