定義
動作
input Type Expectations
以下の表では、さまざまなinputタイプに対する $toObject の動作を説明しています。
入力タイプ | 動作 |
|---|---|
文字列 | string 内の内容に対応する document を返します。 string には、有効なJSONオブジェクトを表す文字が含まれている必要があります。 |
null または欠落 | null を返します。 |
解析ルール
string をオブジェクトに変換する場合、$toObject は次のことを行います。
有効なJSON構文が必要です。コメントと末尾のカンマは許可されていません。
最上位の値がオブジェクトである必要があります。string がオブジェクトを表していない場合、
$toObjectはエラーを返します。$oid、$date、Timestamp(...)などの拡張JSON型ラッパーは解釈されません。これらは結果内に string またはネストされたオブジェクトとして残ります。オブジェクトに重複するフィールド名が含まれている場合に最後の値を保持します。同じフィールドの以前の値は破棄されます。
数値型マッピング
$toObject は、値と形式に基づいて数値型を変換します。
32 ビット符号付き範囲内の整数は
intになります。32 ビットの範囲外、64 ビットの符号付き範囲内の整数は
longになります。64 ビットの符号付き範囲外の整数は
doubleになり、精度が失われる可能性があります。点または指数表記の数値は
doubleになります。
例
次の表は、$toObject を使用して string をオブジェクトに変換する例を示しています。
例 | 結果 |
|---|---|
| { a: 1, b: 2 } |
| { } |
| エラー: inputは予想される型「オブジェクト」と一致しません |
| エラー: inputは有効なJSONを表しません : 予期しないスタンドアロン値 |
| エラー: input は有効なJSONを表しません : 埋め込み null バイトは無効 |
| { name: 'fex00o' } |
| { a: 3, b: 2 } |
| { foo: null } |
| { foo: false } |
| { ['__proto__']: { foo: null } } |
| { foo: 'NaN' } |
| { foo: 123 } |
| { foo: Long('4294967296') } |
| { foo: 1.123123 } |
| { foo: 1200 } |
| {LargePos:18446744073709552000 } |
| {LargeNetg: -18446744073709552000 } |
| null |
string のオブジェクトへの変換
フィールドに保存されている文字列を含むコレクションを作成します。
db.jsonStrings.insertOne({ _id: 1, config: '{"feature": true, "threshold": 10}' })
次の集計は、config の string をオブジェクトに変換します。
db.jsonStrings.aggregate([ { $project: { _id: 0, parsedConfig: { $toObject: "$config" } } } ])
この操作は、parsedConfig がブール値と整数値を持つネストされたdocumentであるdocumentを返します。
{ parsedConfig: { feature: true, threshold: 10 } }
注意
変換操作でエラーが発生した場合、集計操作は停止し、エラーがスローされます。この動作をオーバーライドするには、代わりに $convert を使用します。