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.
Menu Docs

$sort (operador de atualização)

Observação

Desambiguação

A página seguinte refere-se ao modificador de atualização. Para o estágio de agregação $sort,$sort consulte.

$sort

O modificador ordena os elementos $sort $push de uma array durante uma operação .

Para utilizar o $sort modificador, ele deve aparecer com o modificador. Você pode passar uma array $each vazia [] para o modificador de $each $sort modo que apenas o modificador tenha efeito.

{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$sort: <sort specification>
}
}
}

Para <sort specification>:

  • Para ordenar os elementos de array que não forem documentos ou, se os elementos da array forem documentos, para ordenar pelos documentos inteiros, especifique 1 para ordem crescente ou -1 para ordem decrescente.

  • Se os elementos de array forem documentos, para ordenar por um campo nos documentos, especifique um documento de ordenação com o campo e a direção, ou seja, { field: 1 } ou { field: -1 }. Não mencione o campo de array na especificação da ordenação (por exemplo, { "arrayField.field": 1 } está incorreto).

A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.

O modificador pode ordenar elementos de array $sort $sort que não são documentos. Em versões anteriores, o modificador exigia que os elementos de array fossem documentos.

Se os elementos de array forem documentos, o modificador poderá ordenar pelo documento inteiro ou por um campo específico nos documentos. Nas versões anteriores, o modificador só pode ordenar por um campo específico nos $sort documentos.

Tentar utilizar o modificador $sort sem o modificador resulta $each em um erro. não $sort exige mais o modificador. Para uma $slice $push lista de modificadores disponíveis para, consulte Modificadores.

Crie a coleção students:

db.students.insertOne(
{
"_id": 1,
"quizzes": [
{ "id" : 1, "score" : 6 },
{ "id" : 2, "score" : 9 }
]
}
)

A atualização a seguir acrescenta documentos adicionais à array quizzes e, em seguida, classifica todos os elementos de array pelo campo crescente score:

db.students.updateOne(
{ _id: 1 },
{
$push: {
quizzes: {
$each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ],
$sort: { score: 1 }
}
}
}
)

Importante

O documento de ordenação refere-se diretamente ao campo nos documentos e não faz referência ao campo de array que contém quizzes, ou seja, { score: 1 }, e não { "quizzes.score": 1}

Após a atualização, os elementos de array estão na ordem crescente do campo score:

{
"_id" : 1,
"quizzes" : [
{ "id" : 1, "score" : 6 },
{ "id" : 5, "score" : 6 },
{ "id" : 4, "score" : 7 },
{ "id" : 3, "score" : 8 },
{ "id" : 2, "score" : 9 }
]
}

Adicione o seguinte documento à coleção students:

db.students.insertOne( { "_id" : 2, "tests" : [ 89, 70, 89, 50 ] } )

A seguinte operação adiciona mais dois elementos na array tests e ordena os elementos:

db.students.updateOne(
{ _id: 2 },
{ $push: { tests: { $each: [ 40, 60 ], $sort: 1 } } }
)

O documento atualizado tem os elementos da array tests em ordem crescente:

{ "_id" : 2, "tests" : [ 40, 50, 60, 70, 89, 89 ] }

Adicione o seguinte documento à coleção students:

db.students.insertOne( { "_id" : 3, "tests" : [ 89, 70, 100, 20 ] } )

Para atualizar o campo tests para ordenar seus elementos em ordem decrescente, especifique { $sort: -1 } e especifique uma array vazia [] para o modificador $each. Por exemplo:

db.students.updateOne(
{ _id: 3 },
{ $push: { tests: { $each: [ ], $sort: -1 } } }
)

O exemplo ordena os valores de campo tests em ordem decrescente:

{ "_id" : 3, "tests" : [ 100, 89, 70, 20 ] }

Adicione o seguinte documento à coleção students:

db.students.insertOne(
{
"_id" : 5,
"quizzes" : [
{ "wk": 1, "score" : 10 },
{ "wk": 2, "score" : 8 },
{ "wk": 3, "score" : 5 },
{ "wk": 4, "score" : 6 }
]
}
)

A seguinte operação do $push utiliza:

  • o modificador $each para adicionar vários documentos à array quizzes,

  • o modificador para ordenar todos os elementos $sort da quizzes array modificada pelo score campo em ordem decrescente e

  • o modificador $slice para manter apenas os três primeiros elementos ordenados da array quizzes.

db.students.updateOne(
{ _id: 5 },
{
$push: {
quizzes: {
$each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
$sort: { score: -1 },
$slice: 3
}
}
}
)

Após a operação, somente os três testes de pontuação mais alta estão na array:

{
"_id" : 5,
"quizzes" : [
{ "wk" : 1, "score" : 10 },
{ "wk" : 2, "score" : 8 },
{ "wk" : 5, "score" : 8 }
]
}

A ordem dos modificadores na query não altera a ordem em que os modificadores são aplicados. Para obter detalhes, consulte Modificadores.

Receber um selo de habilidade

Domine "Os fundamentos da transformação de dados" gratuitamente!

Saiba mais

Avalie esta página