문서 메뉴

문서 홈애플리케이션 개발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> 바이너리 문자열의 기본64 표현입니다.

  • <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-character 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)