Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

MongoDB 확장 JSON(v2)

이 페이지의 내용

  • MongoDB 확장 JSON v2 사용법
  • BSON 데이터 유형 및 관련 표현
  • 예시

중요

명확화

다음 페이지에서는 MongoDB 확장 JSON v2에 대해 설명합니다. 레거시 MongoDB 확장 JSON v1에 대한 논의는 MongoDB 확장 JSON(v1)을 참조하세요.

mongosh에서 지원되는 데이터 유형은 mongosh 데이터 유형을 참조하세요.

JSONBSON에서 지원하는 유형의 하위 집합만 직접 나타낼 수 있습니다. 유형 정보를 보존하기 위해 MongoDB는 JSON 형식에 다음 확장을 추가합니다.

  • 표준 모드
    가독성과 상호 운용성을 포기하고 유형 보존을 강조하는 문자열 형식입니다. 즉, 정규에서 BSON으로 변환하면 일반적으로 특정 경우를 제외하고는 유형 정보를 보존합니다.
  • 완화 모드
    유형 보존을 포기하고 가독성과 상호 운용성을 강조하는 문자열 형식입니다. 즉, 완화된 형식에서 BSON으로 변환하면 유형 정보가 손실될 수 있습니다.

두 형식 모두 JSON RFC를 준수하며 다양한 MongoDB 드라이버 및 도구로 구문 분석될 수 있습니다.

다음 드라이버는 확장 JSON v2.0을 사용합니다.

  • C

  • C++

  • Go

  • Java

  • Node

  • Perl

  • PHPC

  • Python

  • Scala

레거시 MongoDB 확장 JSON v1을 사용하는 C# 및 Ruby의 경우 MongoDB Extended JSON (v1)을 참조하세요.

MongoDB는 확장 JSON에 대해 다음과 같은 메서드를 제공합니다.

메서드
설명
serialize

BSON 객체를 직렬화하여 데이터를 확장 JSON 형식으로 반환합니다.

EJSON.serialize( db.<collection>.findOne() )
deserialize

직렬화된 문서를 필드 및 값 쌍으로 변환합니다. 값은 BSON types를 가지고 있습니다.

EJSON.deserialize( <serialized object> )
stringify

역직렬화된 객체의 요소와 type 쌍을 문자열로 변환합니다.

EJSON.stringify( <deserialized object> )
parse

문자열을 요소와 type 쌍으로 변환합니다.

EJSON.parse( <string> )

사용 예시는 아래의 확장 JSON 객체 변환을 참조하세요.

자세한 내용은 다음 문서를 참조하세요.

버전 4.2부터:

바이너리
변경 사항
확장 JSON v2.0(표준 모드) 형식을 사용합니다.

확장 JSON v2.0 사용 (Canonical 모드) 메타데이터의 형식입니다. 확장 JSON v2.0 을(를) 지원하는 mongorestore 버전 4.2 이상이 필요합니다. (Canonical 모드 또는 Relaxed) 형식입니다.

일반적으로 mongodumpmongorestore의 해당 버전을 사용합니다. mongodump 의 특정 버전으로 생성된 data file을 복원하려면 mongorestore 의 해당 버전을 사용하세요.

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.

일반적으로 mongoexportmongoimport 의 버전이 일치해야 합니다. mongoexport 에서 생성된 데이터를 가져오려면 mongoimport 의 해당 버전을 사용해야 합니다.

다음은 몇 가지 일반적인 BSON 데이터 유형과 표준완화 모드에서의 관련 표현입니다.

전체 목록은 여기에서 확인할 수 있습니다.

Array

표준
완화
[ <elements> ]
<Same as Canonical>

배열 요소는 다음과 같습니다:

  • <elements>

    • 배열 요소는 확장 JSON을 사용합니다.

    • 빈 배열을 지정하려면 [ ] 내용을 생략합니다.

Binary

표준
완화
{ "$binary":
{
"base64": "<payload>",
"subType": "<t>"
}
}
<Same as Canonical>

여기서 값은 다음과 같습니다.

  • "<payload>"

    • Base64로 인코딩된('=' 패딩 포함) 페이로드 문자열.

  • "<t>"

    • BSON 바이너리 하위 유형에 해당하는 1자리 또는 2자리의 16진수 문자열입니다. 사용 가능한 하위 유형에 대해서는 확장 bson 문서 http://bsonspec.org/spec.html을 참조하세요.

Date

1970년에서 9999년 사이의 날짜:

표준
완화
{"$date": {"$numberLong": "<millis>"}}
{"$date": "<ISO-8601 Date/Time Format>"}

1970년 이전 또는 9999년 이후 날짜:

표준
완화
{"$date": {"$numberLong": "<millis>"}}
<Same as Canonical>

여기서 값은 다음과 같습니다.

  • "<millis>"

    • 부호 있는 64비트 정수(문자열)입니다. 이 값은 에포크를 기준으로 밀리초를 나타냅니다.

  • "<ISO-8601 Date/Time Format>"

    • 문자열로 표현한 ISO-8601 인터넷 날짜/시간 형식의 날짜.

    • 날짜/시간의 최대 시간 정밀도는 밀리초입니다.

      • 분수 초는 분수 부분이 0이 아닌 경우 소수점 이하 3자리까지 정확하게 표시됩니다.

      • 소수부가 0인 경우 소수 자릿수는 반드시 생략해야 합니다.

Decimal128

표준
완화
{ "$numberDecimal": "<number>" }
<Same as Canonical>

여기서 값은 다음과 같습니다.

Document

표준
완화
{ <content> }
<Same as Canonical>

문서 내용은 다음과 같습니다:

  • <content>

    • 확장 JSON을 사용하는 이름:값 쌍입니다.

    • 빈 문서를 지정하려면 { } 내용을 생략하세요.

Double

유한한 수의 경우:

표준
완화
{"$numberDouble": "<decimal string>" }
<non-integer number>

무한한 수 또는 NAN의 경우:

표준
완화
{"$numberDouble": <"Infinity"|"-Infinity"|"NaN"> }
<Same as Canonical>

여기서 값은 다음과 같습니다.

  • "<decimal string>"

    • 부호 있는 64비트 부동소수점(문자열)입니다.

  • <non-integer number>

    • 정수가 아닌 숫자입니다. 정수는 double이 아닌 정수로 구문 분석됩니다.

Int64

표준
완화
{ "$numberLong": "<number>" }
<integer>

여기서 값은 다음과 같습니다.

  • "<number>"

    • 부호 있는 64비트 정수(문자열)입니다.

  • <integer>

    • 부호 있는 64비트 정수입니다.

Int32

표준
완화
{ "$numberInt": "<number>" }
<integer>

여기서 값은 다음과 같습니다.

  • "<number>"

    • 부호 있는 32비트 정수(문자열)입니다.

  • <integer>

    • 부호 있는 32비트 정수입니다.

MaxKey

표준
완화
{ "$maxKey": 1 }
<Same as Canonical>

MaxKey BSON 데이터 유형은 다른 모든 유형보다 높은 비교율을 보입니다. BSON types에 대한 비교 순서에 대한 자세한 내용은 Comparison/Sort Order를 참조하세요.

MinKey

표준
완화
{ "$minKey": 1 }
<Same as Canonical>

MinKey BSON 데이터 유형은 비교 순위가 다른 모든 유형보다 낮습니다. BSON 유형의 비교 순서에 대한 자세한 내용은 비교/순서 정렬을 참조하세요.

ObjectId

표준
완화
{ "$oid": "<ObjectId bytes>" }
<Same as Canonical>

여기서 값은 다음과 같습니다.

  • "<ObjectId bytes>"

    • ObjectId 바이트를 나타내는 24자의 빅엔디안 16진수 문자열입니다.

Regular Expression

표준
완화
{ "$regularExpression":
{
"pattern": "<regexPattern>",
"options": "<options>"
}
}
<Same as Canonical>

여기서 값은 다음과 같습니다.

  • "<regexPattern>"

    • 정규 표현식 패턴에 해당하는 문자열입니다. 문자열에는 유효한 JSON 문자와 이스케이프되지 않은 큰따옴표(") 문자가 포함될 수 있지만 이스케이프되지 않은 슬래시(/) 문자는 포함될 수 없습니다.

  • "<options>"

    • BSON 정규식 옵션을 지정하는 문자열입니다. 옵션을 알파벳 순서로 지정해야 합니다. 지원되는 옵션에 대한 자세한 내용은 $options을 참조하세요.

Timestamp

표준
완화
{"$timestamp": {"t": <t>, "i": <i>}}
<Same as Canonical>

여기서 값은 다음과 같습니다.

  • <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}}

아래의 간단한 예시에서는 문서 객체를 만든 후 확장된 JSON 객체 변환 방법을 사용해 객체를 다른 형식으로 변환합니다.

conversions 컬렉션에 문서를 만듭니다.

db.conversions.insertOne( { insertDate: new Date() } )

mongosh 다음 문서 객체를 반환합니다.

{
acknowledged: true,
insertedId: ObjectId("61fbaf25671c45f3f5f4074a")
}

MongoDB 문서 객체에 저장된 데이터를 직렬화합니다.

serialized = EJSON.serialize( db.conversions.findOne() )

mongosh는 JavaScript 객체를 구문 분석하고 "$" 접두사가 붙은 유형을 사용하여 값을 반환합니다.

{
_id: { '$oid': '61fbaf25671c45f3f5f4074a' },
insertDate: { '$date': '2022-02-03T10:32:05.230Z' }
}

직렬화된 객체를 역직렬화합니다.

EJSON.deserialize( serialized )

mongosh(은)는 JavaScript 객체를 구문 분석하고 기본값 mongosh 유형 형식을 사용하여 값을 반환합니다.

{
_id: new ObjectId( "61fbaf25671c45f3f5f4074a" ),
insertDate: ISODate( "2022-02-03T10:32:05.230Z" )
}

객체를 문자열로 변환합니다.

stringified = EJSON.stringify( db.conversions.findOne() )

mongosh 은(는) 변환된 객체의 요소를 문자열로 출력합니다.

{
"_id": {"$oid":"61fbaf25671c45f3f5f4074a"},
"insertDate":{"$date":"2022-02-03T10:32:05.230Z"}
}

문자열을 구문 분석하여 다음 객체를 생성합니다.

EJSON.parse( stringified )

mongosh 변환된 문자열을 문서로 반환합니다.

{
_id: new ObjectId("61fbaf25671c45f3f5f4074a"),
insertDate: ISODate("2022-02-03T10:32:05.230Z")
}

돌아가기

비교 및 정렬 순서