문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

MongoDB 확장 JSON(v1)

이 페이지의 내용

  • MongoDB 확장 JSON v1 및 MongoDB 드라이버
  • 구문 분석기 및 지원되는 형식
  • BSON 데이터 유형 및 관련 표현

중요

명확화

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

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

레거시 mongo 셸에서 지원되는 데이터 유형은 /core/shell-types를 참조하세요.

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

다양한 데이터 유형에 사용되는 표현은 JSON이 구문 분석되는 컨텍스트에 따라 달라집니다.

다음 드라이버는 확장 JSON v1.0(레거시)을 사용합니다.

  • C#

  • Ruby

다른 드라이버에 대해서는 MongoDB 확장 JSON(v2)을 참조하세요.

다음은 유형 정보 인식하여 엄격 모드에서 표현을 구문 분석할 수 있습니다.

mongo 셸을 포함한 다른 JSON 구문 분석기는 엄격 모드 표현을 키/값 쌍으로 구문 분석할 수 있지만 유형 정보 를 인식하지 못합니다.

다음은 유형 정보 인식하여 mongo 셸 모드에서 표현을 구문 분석할 수 있습니다.

  • mongoimport 버전 4.0 이하

  • --query 다양한 MongoDB 도구 옵션

  • mongo 껍질

버전 4 이전.2, mongoexport 는 MongoDB Extended JSON v1 의 Strict 모드 로 데이터를 출력합니다.

버전 4 이전.2, bsondumpmongo 셸 모드 에서 출력합니다.

다음은 엄격 모드mongo 셸 모드 에서 BSON 데이터 유형과 관련 표현을 제공합니다.

data_binary
엄격 모드
mongo 셸 모드
{ "$binary": "<bindata>", "$type": "<t>" }
BinData ( <t>, <bindata> )

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

  • <bindata> 바이너리 문자열의 base64 표현입니다.

  • <t> 데이터 유형을 나타내는 단일 바이트를 나타냅니다.Strict 모드 에서는 16진수 문자열이고 셸 모드 에서는 정수입니다. 확장 bson 문서를 참조하세요. http://bsonspec.org/spec.html

data_date
엄격 모드
mongo 셸 모드
{ "$date": "<date>" }
new Date ( <date> )

엄격 모드 에서 <date> 은 템플릿 YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset> 뒤에 필수 시간대 필드가 있는 ISO-8601 날짜 형식입니다.

셸 모드 에서 <date> 은(는) 에포크 UTC 이후의 밀리초 수를 제공하는 부호 있는 64비트 정수의 JSON 표현입니다.

data_timestamp
엄격 모드
mongo 셸 모드
{ "$timestamp": { "t": <t>, "i": <i> } }
Timestamp( <t>, <i> )

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

  • <t> 는 에포크 이후 초 동안의 부호 없는 32비트 정수를 JSON으로 표현한 것입니다.

  • <i> 증분에 대한 32비트 부호 없는 정수입니다.

data_regex
엄격 모드
mongo 셸 모드
{ "$regex": "<sRegex>", "$options": "<sOptions>" }
/<jRegex>/<jOptions>

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

  • <sRegex> 유효한 JSON 문자의 문자열입니다.

  • <jRegex> 은(는) 유효한 JSON 문자와 이스케이프되지 않은 큰따옴표(") 문자를 포함할 수 있는 문자열이지만 이스케이프되지 않은 슬래시(/) 문자는 포함할 수 없습니다.

  • <sOptions> 알파벳 문자로 표시되는 정규식 옵션이 포함된 문자열입니다.

  • <jOptions> 'g', 'i', 'm' 및 's'(v1.9에 추가됨) 문자만 포함할 수 있는 문자열입니다. JavaScriptmongo Shell 표현은 제한된 옵션 범위를 지원하므로 이 표현으로 변환할 때 적합하지 않은 옵션은 모두 삭제됩니다.

data_oid
엄격 모드
mongo 셸 모드
{ "$oid": "<id>" }
ObjectId( "<id>" )

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

  • <id> 24자리 16진수 문자열입니다.

data_ref
엄격 모드
mongo 셸 모드
{ "$ref": "<name>", "$id": "<id>" }
DBRef("<name>", "<id>")

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

  • <name> 유효한 JSON 문자의 문자열입니다.

  • <id> 모든 유효한 확장 JSON 유형입니다.

data_undefined
엄격 모드
mongo 셸 모드
{ "$undefined": true }
undefined

JavaScript/BSON 정의되지 않은 유형에 대한 표현입니다.

쿼리 문서에는 undefined 를 사용할 수 없습니다 . 레거시 mongo 셸을 사용하여 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 셸에 문서를 삽입합니다.

db.people.insertOne( { name : "Sally", age : undefined } )

결과 문서는 다음과 같이 다릅니다.

{ "name" : "Sally", "age" : null }
{ "name" : "Sally", "age" : undefined }
data_minkey
엄격 모드
mongo 셸 모드
{ "$minKey": 1 }
MinKey

다른 모든 유형보다 낮게 비교되는 MinKey BSON 데이터 유형의 표현입니다. BSON types의 비교 순서에 대한 자세한 내용은 Comparison/Sort Order 를 참조하세요.

data_maxkey
엄격 모드
mongo 셸 모드
{ "$maxKey": 1 }
MaxKey

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

data_numberlong
엄격 모드
mongo 셸 모드
{ "$numberLong": "<number>" }
NumberLong( "<number>" )

NumberLong 부호 있는 64비트 정수입니다. 레거시 mongo shell에서는 따옴표를 사용하여 NumberLong 을(를) 삽입해야 하며 그렇지 않으면 작업에서 오류가 발생합니다.

예를 들어, 다음 명령은 정수 값 주위에 따옴표를 사용하거나 사용하지 않고 9223372036854775807NumberLong 로 삽입하려고 시도합니다.

db.json.insertOne( { longQuoted : NumberLong("9223372036854775807") } )
db.json.insertOne( { longUnQuoted : NumberLong(9223372036854775807) } )

강조 표시된 줄은 레거시 mongo 셸에서 오류를 생성합니다. mongosh 에서 삽입이 성공합니다.

data_numberdecimal
엄격 모드
mongo 셸 모드
{ "$numberDecimal": "<number>" }
NumberDecimal( "<number>" )

NumberDecimal고정밀 소수점 입니다. . 따옴표를 포함하지 않으면 입력된 숫자가 큰따옴표로 처리되어 데이터가 손실될 수 있습니다.

예를 들어, 다음 명령은 값 주위에 따옴표를 사용하거나 사용하지 않고 123.40NumberDecimal 로 삽입합니다.

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 에서 다릅니다.

따옴표로 묶인 문자열 형식 NumberDecimal("123.40") 은 더 이상 사용되지 않습니다. 삽입은 성공하지만 경고도 발생합니다.

따옴표로 묶지 않은 문자열 형식 NumberDecimal(123.40) 은 값을 123.4 로 저장합니다. 후행 0 가 삭제됩니다.

← MongoDB 확장 JSON(v2)