定義
動作
入力タイプの期待
以下の表では、さまざまな入力タイプに対する $toArray の動作を説明しています。
入力タイプ | 動作 |
|---|---|
binData | 数値の配列を返します。 配列要素の数値型は、 binData形式によって異なります。 |
文字列 | string 内の内容に対応する配列を返します。 |
null または欠落 | null を返します。 |
解析ルール
string を配列に変換する場合、$toArray は次のことを行います。
最上位の値が配列である必要があります。 string が配列を表さない場合、
$toArrayはエラーを返します。$oid、$date、Timestamp(...)などの拡張JSON型のラッパーは解釈されません。これらは結果内に string またはネストされたオブジェクトとして残ります。
binData 変換
binData を配列に変換する場合、$toArray は次のことを行います。
サブタイプ 9 値を持つ binData を受け入れます。
PACKED_BITベクトルをboolean配列に変換します。INT8ベクトルをinteger配列に変換します。FLOAT32ベクトルをdouble配列に変換します。
数値型マッピング
$toArray は、値と形式に基づいて数値型を変換します。
32 ビット符号付き範囲内の整数は
intになります。32 ビットの範囲外、64 ビットの符号付き範囲内の整数は
longになります。64 ビットの符号付き範囲外の整数は
doubleになり、精度が失われる可能性があります。点または指数表記の数値は
doubleになります。
例
次の表は、$toArray を使用して string を配列に変換する例を示しています。
例 | 結果 |
|---|---|
| [ 1, 2, 3 ] |
| [ 'a', 'b', 'c' ] |
| [ ] |
| エラー: 入力が予想されるタイプの「配列」と一致しません |
| エラー: $convert で onError 値がない場合、int から配列への変換がサポートされていません 注意入力は「string」である必要があります。 |
| エラー: 入力は有効なJSONを表しません : 予期しないスタンドアロン値 |
| [ { '$oid': '507f1f77bcf86cd799439011' } ] 注意拡張JSONは認識されません。 |
| null |
String を配列に変換する
jsonStringsコレクションにドキュメントを挿入します。
db.jsonStrings.insertOne({_id: 1})
次の操作は、string を配列に変換します。
db.jsonStrings.aggregate([ { $project: { _id: 0, numbers: { $toArray: "[1, 2, 3]" }, documents: { $toArray: '[{"a": 1}, {"b": 2}]' } } } ])
結果の numbersフィールドは整数の配列で、documents は埋め込みドキュメントの配列です。
{ numbers: [ 1, 2, 3 ], documents: [ { a: 1 }, { b: 2 } ] }
binData を配列に変換する
次の操作では、 binData ベクトルを配列に変換します。
db.t.insertMany([ // Empty PACKED_BIT vector converts to empty array { v: BinData(9, "EAA=") }, // PACKED_BIT vector converts to bool array { v: BinData(9, "EAB/Bw==") }, // INT8 vector converts to int array { v: BinData(9, "AwAAAQ==") }, // FLOAT32 vector converts to double array { v: BinData(9, "JwCamZk+") }, // FLOAT32 vector with special values converts to [-Infinity, 0, Infinity] { v: BinData(9, "JwAAAID/AAAAAAAAgH8=") } ])
db.t.aggregate([ { $project: { _id: 0, original: "$v", asArray: { $toArray: "$v" } } } ])
この操作では以下が返されます。
[ { original: Binary.fromPackedBits(new Uint8Array([])), asArray: [] }, { original: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])), asArray: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] }, { original: Binary.fromInt8Array(new Int8Array([ 0, 1 ])), asArray: [ 0, 1 ] }, { original: Binary.fromFloat32Array(new Float32Array([ 0.30000001192092896 ])), asArray: [ 0.30000001192092896 ] }, { original: Binary.fromFloat32Array(new Float32Array([ -Infinity, 0, Infinity ])), asArray: [ -Infinity, 0, Infinity ] } ]
注意
変換操作でエラーが発生した場合、集計操作は停止し、エラーがスローされます。この動作をオーバーライドするには、代わりに $convert を使用します。