정의
$toArray값을 배열 로 변환합니다. 값을 변환할 수 없는 경우
$toArray오류가 발생합니다. 값이null이거나 누락된 경우$toArray는 null을 반환합니다.$toArray의 구문은 다음과 같습니다:{ $toArray: <expression> } $toArray유효한 표현식 사용합니다.$toArray다음 표현식 의 약어입니다.$convert{ $convert: { input: <expression>, to: "array" } }
행동
입력 유형 기대 사항
다음 표에서는 다양한 입력 유형에 대한 $toArray 의 동작을 설명합니다.
입력 유형 | 행동 |
|---|---|
BinData | 숫자 값의 배열 반환합니다. 배열 요소의 숫자 유형은 binData 형식에 따라 달라집니다. |
문자열 | 문자열 내의 내용에 해당하는 배열 반환합니다. 문자열에는 유효한 JSON 배열 나타내는 문자가 포함되어야 합니다. |
Null 또는 누락 | null을 반환합니다. |
구문 분석 규칙
문자열을 배열 로 변환할 때 $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' } ] 참고확장 JSON 인식되지 않습니다. |
| 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 를 대신 사용하세요.