Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

$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 usa qualquer expressãoválida.

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

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

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

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 da faixa assinada de 32bits tornam-se int.

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

  • Inteiros fora da faixa assinada 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: input não corresponde ao tipo esperado 'array'

$toArray: 123

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

$toArray: "123"

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

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

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

$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.

Avalie esta página