Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$toArray(式演算子)

$toArray

値を配列に変換します。値を変換できない場合は、$toArray がエラーになります。値が null または欠落している場合、$toArray は null を返します。

$toArray の構文は次のとおりです。

{
$toArray: <expression>
}

$toArray は、任意の有効な 式を受け入れます。

$toArray は次の$convert 式の省略形です。

{ $convert: { input: <expression>, to: "array" } }

以下の表では、さまざまな入力タイプに対する $toArray の動作を説明しています。

入力タイプ
動作

binData

数値の配列を返します。

配列要素の数値型は、 binData形式によって異なります。

文字列

string 内の内容に対応する配列を返します。

string には有効なJSON配列を表す文字が含まれている必要があります。

null または欠落

null を返します。

string を配列に変換する場合、$toArray は次のことを行います。

  • 有効なJSON構文が必要です。コメントと末尾のカンマは許可されていません。

  • 最上位の値が配列である必要があります。 string が配列を表さない場合、$toArray はエラーを返します。

  • $oid$dateTimestamp(...) などの拡張JSON型のラッパーは解釈されません。これらは結果内に string またはネストされたオブジェクトとして残ります。

binData を配列に変換する場合、$toArray は次のことを行います。

  • サブタイプ 9 値を持つ binData を受け入れます。

  • PACKED_BIT ベクトルを boolean 配列に変換します。

  • INT8 ベクトルを integer 配列に変換します。

  • FLOAT32 ベクトルを double 配列に変換します。

$toArray は、値と形式に基づいて数値型を変換します。

  • 32 ビット符号付き範囲内の整数は int になります。

  • 32 ビットの範囲外、64 ビットの符号付き範囲内の整数は long になります。

  • 64 ビットの符号付き範囲外の整数は double になり、精度が失われる可能性があります。

  • 点または指数表記の数値は double になります。

次の表は、$toArray を使用して string を配列に変換する例を示しています。

結果

$toArray: "[1, 2, 3]"

[ 1, 2, 3 ]

$toArray: '["a", "b", "c"]'

[ 'a', 'b', 'c' ]

$toArray: "[]"

[ ]

$toArray: "{}"

エラー: 入力が予想されるタイプの「配列」と一致しません

$toArray: 123

エラー: $convert で onError 値がない場合、int から配列への変換がサポートされていません

注意

入力は「string」である必要があります。

$toArray: "123"

エラー: 入力は有効なJSONを表しません : 予期しないスタンドアロン値

$toArray: "[{\"$oid\": \"507f1f77bcf86cd799439011\"}]"

[ { '$oid': '507f1f77bcf86cd799439011' } ]

注意

拡張JSONは認識されません。

$toArray: null

null

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 ベクトルを配列に変換します。

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 を使用します。

戻る

$tanh

項目一覧