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

$toArray (operador de expressão )

$toArray

Converte um valor em uma array. Se o valor não puder ser convertido, $toArray apresentará erro. Se o valor for null ou estiver ausente, $toArray retornará nulo.

$toArray tem a seguinte sintaxe:

{
$toArray: <expression>
}

$toArray recebe qualquer expressão válida.

$toArray é uma abreviatura para a seguinte expressão $convert :

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

A tabela seguinte descreve o comportamento do $toArray para diferentes tipos de entrada:

Tipo de entrada
Comportamento

BinData

Retorna uma array de valores numéricos.

O tipo numérico dos elementos de array depende do formato binData.

String

Retorna uma array correspondente ao conteúdo dentro da string.

A string deve conter caracteres que representam uma array JSON válida.

Nulo ou Ausente

Retorna nulo.

Ao converter uma string em uma array, $toArray:

  • Exige sintaxe JSON válida. Comentários e vírgulas à direita não são permitidos.

  • Requer que o valor de nível superior seja uma array. Se a string não representar uma array, $toArray apresentará erro.

  • Não interpreta wrappers de tipo JSON estendido como $oid, $date ou Timestamp(...). Eles permanecem strings ou objetos aninhados no resultado.

Ao converter binData em uma array, $toArray:

  • Aceita binData com valores de subtipo 9.

  • Converte PACKED_BIT vetores em boolean matrizes.

  • Converte INT8 vetores em integer matrizes.

  • Converte FLOAT32 vetores em double matrizes.

$toArray converte tipos numéricos com base em seu valor e formato:

  • Os números inteiros dentro do intervalo assinado de 32bits tornam-se int.

  • Os inteiros fora do intervalo de 32bits, mas dentro do intervalo de 64bits assinados, tornam-se long.

  • Inteiros fora do intervalo assinado de 64bits tornam-se double, o que pode resultar em perda de precisão.

  • Números com um ponto decimal ou notação expoente se tornam double.

A tabela a seguir mostra exemplos de uso de $toArray para converter strings em arrays:

Exemplo
Resultados

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

[ 1, 2, 3 ]

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

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

$toArray: "[]"

[ ]

$toArray: "{}"

Erro: a entrada não corresponde ao tipo esperado 'array'

$toArray: 123

Erro: conversão não suportada de int para array em $convert sem valor onError

Observação

A entrada deve ser uma "string".

$toArray: "123"

Erro: a entrada não representa um JSON válido: valor autônomo inesperado

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

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

Observação

O JSON estendido não é reconhecido.

$toArray: null

zero

Inserir um documento na coleção jsonStrings:

db.jsonStrings.insertOne({_id: 1})

A seguinte operação converte strings em arrays:

db.jsonStrings.aggregate([
{
$project: {
_id: 0,
numbers: { $toArray: "[1, 2, 3]" },
documents: { $toArray: '[{"a": 1}, {"b": 2}]' }
}
}
])

O campo numbers no resultado é uma array de números inteiros e documents é uma array de documentos incorporados:

{
numbers: [ 1, 2, 3 ],
documents: [ { a: 1 }, { b: 2 } ]
}

A seguinte operação converte vetores binData em arrays:

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" }
}
}
])

A operação retorna:

[
{ 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 ]
}
]

Observação

Se a operação de conversão encontrar um erro, a operação de aggregation interromperá e exibirá um erro. Para substituir esse comportamento, use $convert em vez disso.

Voltar

$tanh

Nesta página