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 데이터베이스 도구
버전 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>"
객체 ID 바이트를 나타내는 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") }