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.

$sortArray (operador de expressão)

$sortArray

Novidades na versão 5.2.

Classifica uma array com base em seus elementos. A ordem de classificação é especificada pelo usuário.

$sortArray tem a seguinte sintaxe:

$sortArray: { input: <array>, sortBy: <sort spec>}
Campo
Tipo
Descrição

input

expressão

A array a ser ordenada.

O resultado é null, se a expressão:

  • Avalia como ausente.

  • Avalia como null.

  • Avalia como undefined.

Se a expressão avaliar como qualquer outro valor que não array, a operação resultará em um erro.

sortBy

documento ou int (1 ou -1)

Um valor que especifica uma ordem de classificação. Seus valores possíveis são 1, -1 ou um documento.

Se o valor de sortBy for um documento, a ordem de classificação refere-se aos pares campo-direção que determinam como classificar os elementos de array, como { name: 1, age: -1 }, em que 1 indica ordem crescente e -1 indica ordem decrescente.

Se o valor de sortBy for 1, o MongoDB classificará a array em ordem crescente. Se o valor de sortBy for -1, o MongoDB classificará a array em ordem decrescente.

A expressão $sortArray ordena a array input de acordo com a especificação sortBy.

A sintaxe e semântica $sortArray são as mesmas que o comportamento em uma operação $push modificada por $sort.

Se os elementos de array forem documentos, você poderá ordenar por um campo de documento. Especifique o nome do campo e uma direção de ordenação, crescente (1) ou decrescente (-1).

{ input: <array-of-documents>, sortBy: { <document-field>: <sort-direction> }}

Para classificar toda a array por valor ou por elementos de array que não sejam documentos, identifique a array de entrada e especifique 1 para uma ordem crescente ou -1 para uma ordem decrescente no parâmetro sortBy.

{ input: <array-of-documents>, sortBy: <sort-direction>}
  • Não há traversal implícita de array na chave de ordenação.

  • Operadores posicionais não são suportados. Um nome de campo como "valores.1" denota um campo chamado "1" na array values. Não se refere ao item no índice 1 na array values.

  • Quando uma array inteira é ordenada, a ordem é lexicográfica. O estágio de aggregation $sort se comporta de forma diferente. Consulte $sort para obter mais detalhes.

  • Quando uma array é classificada por um campo, todos os documentos ou escalares que não têm o campo especificado são classificados igualmente. A ordem de classificação resultante é indefinida.

  • null valores existentes e valores ausentes são ordenados igualmente.

A estabilidade da ordenação não está especificada. Os usuários não devem confiar em $sortArray para usar um algoritmo de ordenação específico.

Os exemplos nesta seção usam uma array team em uma collection engineers.

db.engineers.insertOne( { team: [ { name: "pat", age: 30, address: { street: "12 Baker St", city: "London" } }, { name: "dallas", age: 36, address: { street: "12 Cowper St", city: "Palo Alto" } }, { name: "charlie", age: 42, address: { street: "12 French St", city: "New Brunswick" } } ] })

A array team tem três elementos. Cada elemento de team tem subelementos agrupados: name, age e address. Os exemplos seguintes mostram como ordenar a array team utilizando estes subelementos.

A seguinte operação classifica no campo name dentro da array team:

db.engineers.aggregate( [ { $project: { _id: 0, result: { $sortArray: { input: "$team", sortBy: { name: 1 } } } } }] )

A operação retorna os seguintes resultados:

{ result: [ { name: 'charlie', age: 42, address: { street: '12 French St', city: 'New Brunswick' } }, { name: 'dallas', age: 36, address: { street: '12 Cowper St', city: 'Palo Alto' } }, { name: 'pat', age: 30, address: { street: '12 Baker St', city: 'London' } } ]}

A seguinte operação utiliza notação de ponto para ordenar a array com base no subcampo address:

db.engineers.aggregate( [ { $project: { _id: 0, result: { $sortArray: { input: "$team", sortBy: { "address.city": -1 } } } } }] )

A direção de ordenação é decrescente porque o valor sortBy é "-1".

{ result: [ { name: 'dallas', age: 36, address: { street: '12 Cowper St', city: 'Palo Alto' } }, { name: 'charlie', age: 42, address: { street: '12 French St', city: 'New Brunswick' } }, { name: 'pat', age: 30, address: { street: '12 Baker St', city: 'London' } } ]}

A seguinte operação especifica múltiplos campos de índice para fazer uma ordenação composta dentro da operação $sortArray:

db.engineers.aggregate( [ { $project: { _id: 0, result: { $sortArray: { input: "$team", sortBy: { age: -1, name: 1 } } } } } ] )

Saída de exemplo:

{ result: [ { name: 'charlie', age: 42, address: { street: '12 French St', city: 'New Brunswick' } }, { name: 'dallas', age: 36, address: { street: '12 Cowper St', city: 'Palo Alto' } }, { name: 'pat', age: 30, address: { street: '12 Baker St', city: 'London' } } ]}

Este exemplo especifica uma array de entrada diretamente. Os valores são todos do mesmo tipo, Int32:

db.engineers.aggregate( [ { $project: { _id: 0, result: { $sortArray: { input: [ 1, 4, 1, 6, 12, 5 ], sortBy: 1 } } } }] )

Saída de exemplo:

[ { result: [ 1, 1, 4, 5, 6, 12 ] } ]

A array de entrada tem um "1" na posição 0 e na posição 2. Os números "1" são agrupados nos resultados, mas não há garantias sobre como o grupo de "1" é ordenado em relação à sua ordem original.

Este exemplo especifica uma array de entrada diretamente. Os valores têm tipos diferentes:

db.engineers.aggregate( [ { $project: { _id: 0, result: { $sortArray: { input: [ 20, 4, { a: "Free" }, 6, 21, 5, "Gratis", { a: null }, { a: { sale: true, price: 19 } }, Decimal128( "10.23" ), { a: "On sale" } ], sortBy: 1 } } } }] )

Saída de exemplo:

{ result: [ 4, 5, 6, Decimal128("10.23"), 20, 21, 'Gratis', { a: null }, { a: 'Free' }, { a: 'On sale' }, { a: { sale: true, price: 19 } } ]}

Os resultados são ordenados.

Por outro lado, depois de alterar o campo sortBy para ordenar o "1" dos campos de documento, sortBy: { a: 1 }, a ordem de classificação para os valores escalares e null é indefinida:

{ result: [ 20, 4, 6, 21, 5, 'Gratis', { a: null }, Decimal128("10.23"), { a: 'Free' }, { a: 'On sale' }, { a: { sale: true, price: 19 } } ] }
Avalie esta página