Docs Menu
Docs Home
/ /

$deserializeEJSON(式演算子)

$deserializeEJSON

バージョン8.3の新機能

拡張JSON (EJSON)形式をネイティブのBSON値に変換します。 でJSON string を解析した後、この式を使用して、EJSON 型のラッパーを対応するBSON型に変換できます。$convert

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

$deserializeEJSON 次のフィールドが含まれるドキュメントについて、

フィールド
タイプ
必要性
説明

input

必須

ネイティブBSON形式に変換する拡張JSON値。これは、EJSON タイプのラッパーを含むBSONドキュメントである必要があります。

onError

任意

変換中に操作でエラーが発生した場合に返される値。

指定されていない場合、エラーが発生すると、操作はエラーをスローして停止します。

$deserializeEJSON は、拡張JSON型のラッパーを対応するBSON型に変換します。

拡張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 string を解析し、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

項目一覧