Docs Menu
Docs Home
/ /

$sort (update modifier)

Nota

Desambiguación

La siguiente página hace referencia al modificador de actualización $sortPara la etapa de agregación, véase $sort.

$sort

El modificador $sort ordena los elementos de un arreglo durante una operación $push.

Para usar el $sort modificador,debe aparecer junto con el modificador. Puede pasar una matriz $each vacía [] al modificador de $each $sort modo que solo el modificador tenga efecto.

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

Para <sort specification>:

  • Para ordenar elementos de una matriz que no sean documentos, o si los elementos de la matriz son documentos, para ordenar por todos los documentos, especifique 1 para orden ascendente o -1 para orden descendente.

  • Si los elementos de la matriz son documentos, para ordenar por un campo, especifique un documento de ordenación con el campo y la dirección, por{ field: 1 } ejemplo,{ field: -1 } o. No haga referencia al campo de la matriz que lo contiene en la especificación de ordenación (por ejemplo, { "arrayField.field": 1 } es incorrecto).

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

El modificador permite ordenar elementos de matriz $sort $sort que no sean documentos. En versiones anteriores, el modificador requería que los elementos de matriz fueran documentos.

Si los elementos de la matriz son documentos, el modificador puede ordenar por todo el documento o por un campo específico. En versiones anteriores, el modificador solo podía ordenar por un campo $sort específico.

Intentar usar el modificador$sortsin el modificador$eachgenera un error. El modificador$sortya no requiere el modificador$slice. Para ver una lista de modificadores disponibles para$push, consulte Modificadores.

Crear la colección students:

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

La siguiente actualización agrega documentos adicionales a la matriz quizzes y luego ordena todos los elementos de la matriz por el campo ascendente 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

El documento de clasificación se refiere directamente al campo en los documentos y no hace referencia al campo de la matriz quizzes contenedora; es decir, { score: 1 } y no { "quizzes.score": 1}

Después de la actualización, los elementos de la matriz están en orden ascendente del 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 }
]
}

Añada el siguiente documento a la colección students:

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

La siguiente operación agrega dos elementos más a la matriz tests y ordena los elementos:

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

El documento actualizado tiene los elementos de la matriz tests en orden ascendente:

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

Añada el siguiente documento a la colección students:

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

Para actualizar el tests campo y ordenar sus elementos en orden descendente, especifique { $sort: -1 } y una matriz vacía [] para el modificador. Por $each ejemplo:

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

El ejemplo ordena los valores del campo tests en orden descendente:

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

Añada el siguiente documento a la colección students:

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

La siguiente operación $push utiliza:

  • el modificador $each para agregar múltiples documentos al arreglo quizzes,

  • el modificador para ordenar todos los elementos de $sort la quizzes matriz modificada por el score campo en orden descendente, y

  • el modificador $slice para conservar solo los primeros tres elementos ordenados del arreglo 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
}
}
}
)

Después de la operación, solo los tres cuestionarios con mayor puntuación están en el arreglo:

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

El orden de los modificadores en la consulta no altera el orden en que se aplican. Para más detalles, consulte Modificadores.

Volver

$slice

Obtén una insignia de habilidad

Domina los “Fundamentos de la transformación de datos” de forma gratuita.

Más información

En esta página