정의
행동
input 유형 기대 사항
다음 표에서는 다양한 input 유형에 대한 $toArray 의 동작을 설명합니다.
입력 유형 | 행동 |
|---|---|
BinData | 숫자 값의 배열 반환합니다. 배열 요소의 숫자 유형은 binData 형식에 따라 달라집니다. |
문자열 | string 내의 내용에 해당하는 배열 반환합니다. The string must contain characters that represent a valid JSON 배열. |
Null 또는 누락 | null을 반환합니다. |
구문 분석 규칙
When converting a string to an 배열, $toArray:
유효한 JSON 구문이 필요합니다. 주석과 후행 쉼표는 허용되지 않습니다.
최상위 값은 배열 이어야 합니다. 문자열이 배열 나타내지 않으면
$toArray오류가 발생합니다.$oid,$date또는Timestamp(...)와 같은 확장 JSON 유형 래퍼를 해석하지 않습니다. 이는 결과에서 문자열 또는 중첩된 객체로 유지됩니다.
BinData 변환
binData를 배열 로 변환할 때 $toArray:
하위 유형 9 값이 있는 binData를 허용합니다.
PACKED_BIT벡터를boolean배열로 변환합니다.INT8벡터를integer배열로 변환합니다.FLOAT32벡터를double배열로 변환합니다.
숫자 유형 매핑
$toArray 값과 형식에 따라 숫자 유형을 변환합니다.
부호 있는 32비트 범위 내의 정수는
int이(가) 됩니다.32비트 범위 벗어나지만 64비트 부호 있는 범위 내의 정수는
long이(가) 됩니다.부호가 있는 64비트 범위 벗어나는 정수는
double가 되므로 정밀도가 손실될 수 있습니다.점 또는 지수 표기법이 있는 숫자는
double이(가) 됩니다.
예시
다음 표는 $toArray 을 사용하여 문자열을 배열로 변환하는 예를 보여줍니다.
예시 | 결과 |
|---|---|
| [ 1, 2, 3 ] |
| [ 'a', 'b', 'c' ] |
| [ ] |
| 오류: 입력이 예상 유형 ' 배열'과 일치하지 않습니다. |
| 오류: onError 값이 없는 $convert에서 int에서 배열 로의 변환이 지원되지 않습니다. |
| 오류: 입력이 유효한 JSON 나타내지 않음: 예기치 않은 독립형 값 |
| [ { '$oid': '507f1f77bcf86cd799439011' } ] |
| null |
문자열을 배열로 변환
jsonStrings 컬렉션에 문서를 삽입합니다.
db.jsonStrings.insertOne({_id: 1})
다음 작업은 문자열을 배열로 변환합니다.
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 를 대신 사용하세요.