정의
$deserializeEJSON버전 8.3에 추가 되었습니다.
확장 JSON (EJSON) 형식을 네이티브 BSON 값으로 변환합니다. 로 JSON 문자열을 구문 분석한 후 이 표현식 사용하여 EJSON 유형 래퍼를 해당 BSON types로 변환할 수
$convert있습니다.
구문
{ $deserializeEJSON: { input: <expression>, onError: <expression> } }
$deserializeEJSON 은 다음 필드가 있는 문서를 가져옵니다.
필드 | 유형 | 필요성 | 설명 |
|---|---|---|---|
| 표현식 | 필수 사항 | 네이티브 BSON 형식으로 변환할 확장 JSON 값입니다. 이는 EJSON 유형 래퍼가 포함된 BSON 문서 여야 합니다. |
| 표현식 | 옵션 | 변환 중에 작업에 오류가 발생하는 경우 반환할 값입니다. 지정하지 않은 경우 오류가 발생하면 작업이 오류를 발생시키고 중지됩니다. |
행동
유형 래퍼 구문 분석
$deserializeEJSON 확장 JSON 유형 래퍼를 해당 BSON types로 변환합니다.
확장 JSON 유형 래퍼 | BSON 유형 | 예시 |
|---|---|---|
| Int32 |
|
| Int64 |
|
| Double |
|
| ObjectId |
|
| 날짜 |
|
| 날짜 |
|
| 바이너리 |
|
| 정규 표현식 |
|
Null 및 누락된 값
input 값이 null이거나 누락된 경우 $deserializeEJSON 은 null을 반환합니다.
예시
이 페이지의 예제에서는 sample_mflix 샘플 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예시를 실행 하려면 데이터베이스를 제거하고 다시 만들어야 할 수 있습니다.
확장 JSON 문서 역직렬화
다음 예시 확장 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" ] } }
JSON 문자열 구문 분석 및 역직렬화
다음 예시 $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 사용
다음 예시 onError 를 사용하여 역직렬화가 실패할 경우 대체 값을 제공합니다.
db.data.aggregate([ { $project: { result: { $deserializeEJSON: { input: "$ejsonField", onError: { error: "Invalid EJSON format" } } } } } ])
자세히 알아보기
MongoDB Shell 확장 JSON 작업에 도움이 되는 내장 메서드를 제공합니다. 자세한 학습 은 EJSON을 참조하세요.