定義
$deserializeEJSONバージョン8.3の新機能。
拡張JSON (EJSON)形式をネイティブのBSON値に変換します。 でJSON string を解析した後、この式を使用して、EJSON 型のラッパーを対応するBSON型に変換できます。
$convert
構文
{ $deserializeEJSON: { input: <expression>, onError: <expression> } }
$deserializeEJSON 次のフィールドが含まれるドキュメントについて、
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| 式 | 必須 | ネイティブBSON形式に変換する拡張JSON値。これは、EJSON タイプのラッパーを含むBSONドキュメントである必要があります。 |
| 式 | 任意 | 変換中に操作でエラーが発生した場合に返される値。 指定されていない場合、エラーが発生すると、操作はエラーをスローして停止します。 |
動作
型ラッパーの解析
$deserializeEJSON は、拡張JSON型のラッパーを対応するBSON型に変換します。
拡張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 string の解析と逆シリアル化
次の例では、$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 の使用
次の例では、onError を使用して逆直列化が失敗した場合にフォールバック値を提供します。
db.data.aggregate([ { $project: { result: { $deserializeEJSON: { input: "$ejsonField", onError: { error: "Invalid EJSON format" } } } } } ])
詳細
MongoDB Shell には、 拡張JSONを操作するのに役立つ組み込みメソッドが用意されています。詳しくは、「 EJSON 」を参照してください。