Docs Menu
Docs Home
/ /

$deserializeEJSON (표현식 연산자)

$deserializeEJSON

버전 8.3에 추가 되었습니다.

확장 JSON (EJSON) 형식을 네이티브 BSON 값으로 변환합니다. 로 JSON 문자열을 구문 분석한 후 이 표현식 사용하여 EJSON 유형 래퍼를 해당 BSON types로 변환할 수 $convert 있습니다.

{
$deserializeEJSON: {
input: <expression>,
onError: <expression>
}
}

$deserializeEJSON 은 다음 필드가 있는 문서를 가져옵니다.

필드
유형
필요성
설명

input

표현식

필수 사항

네이티브 BSON 형식으로 변환할 확장 JSON 값입니다. 이는 EJSON 유형 래퍼가 포함된 BSON 문서 여야 합니다.

onError

표현식

옵션

변환 중에 작업에 오류가 발생하는 경우 반환할 값입니다.

지정하지 않은 경우 오류가 발생하면 작업이 오류를 발생시키고 중지됩니다.

$deserializeEJSON 확장 JSON 유형 래퍼를 해당 BSON types로 변환합니다.

확장 JSON 유형 래퍼
BSON 유형
예시

{"$numberInt": "42"}

Int32

42

{"$numberLong": "42"}

Int64

NumberLong(42)

{"$numberDouble": "42.5"}

Double

42.5

{"$oid": "507f1f77bcf86cd799439011"}

ObjectId

ObjectId("507f1f77bcf86cd799439011")

{"$date": "2021-01-01T00:00:00.000Z"}

날짜

ISODate("2021-01-01T00:00:00.000Z")

{"$date": {"$numberLong": "1609459200000"}}

날짜

ISODate("2021-01-01T00:00:00.000Z")

{"$binary": {"base64": "AQIDBA==", "subType": "00"}}

바이너리

BinData(0, "AQIDBA==")

{"$regularExpression": {"pattern": "abc", "options": "i"}}

정규 표현식

/abc/i

input 값이 null이거나 누락된 경우 $deserializeEJSON 은 null을 반환합니다.

이 페이지의 예제에서는 sample_mflix 샘플 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예시를 실행 하려면 데이터베이스를 제거하고 다시 만들어야 할 수 있습니다.

다음 예시 확장 JSON 문서 네이티브 BSON types로 다시 역직렬화합니다.

db.movies.aggregate([
{
$match: { title: "Inception" }
},
{
$project: {
original: "$$ROOT",
serialized: { $serializeEJSON: { input: "$$ROOT" } }
}
},
{
$project: {
title: "$original.title",
deserialized: { $deserializeEJSON: { input: "$serialized" } }
}
}
])
{
_id: ObjectId("573a1398f29313caabcea974"),
title: "Inception",
deserialized: {
_id: ObjectId("573a1398f29313caabcea974"),
title: "Inception",
year: 2010,
runtime: 148,
released: ISODate("2010-07-16T00:00:00.000Z"),
cast: [
"Leonardo DiCaprio",
"Joseph Gordon-Levitt",
"Ellen Page",
"Tom Hardy"
],
genres: [ "Action", "Sci-Fi", "Thriller" ],
directors: [ "Christopher Nolan" ]
}
}

다음 예시 $convert$deserializeEJSON 를 결합하여 JSON 문자열을 구문 분석하고 EJSON 유형 래퍼를 BSON 으로 변환합니다.

db.aggregate([
{
$documents: [
{
jsonData: '{"_id":{"$oid":"507f1f77bcf86cd799439011"},' +
'"title":"The Matrix",' +
'"year":{"$numberInt":"1999"},' +
'"rating":{"$numberDouble":"8.7"}}'
}
]
},
{
$project: {
parsed: {
$convert: {
input: "$jsonData",
to: "object"
}
}
}
},
{
$project: {
movie: { $deserializeEJSON: { input: "$parsed" } }
}
}
])
{
_id: ObjectId("..."),
movie: {
_id: ObjectId("507f1f77bcf86cd799439011"),
title: "The Matrix",
year: 1999,
rating: 8.7
}
}

EJSON 유형 래퍼가 포함된 특정 필드를 역직렬화할 수 있습니다.

db.movies.aggregate([
{
$match: { title: "Inception" }
},
{
$project: {
title: 1,
serializedMetadata: {
$serializeEJSON: {
input: {
releaseDate: "$released",
runtime: "$runtime",
rating: "$imdb.rating"
}
}
}
}
},
{
$project: {
title: 1,
metadata: { $deserializeEJSON: { input: "$serializedMetadata" } }
}
}
])
{
_id: ObjectId("573a1398f29313caabcea974"),
title: "Inception",
metadata: {
releaseDate: ISODate("2010-07-16T00:00:00.000Z"),
runtime: 148,
rating: 8.8
}
}

다음 예시 onError 를 사용하여 역직렬화가 실패할 경우 대체 값을 제공합니다.

db.data.aggregate([
{
$project: {
result: {
$deserializeEJSON: {
input: "$ejsonField",
onError: { error: "Invalid EJSON format" }
}
}
}
}
])

돌아가기

$derivative

이 페이지의 내용