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

Ordenar resultados

En esta guía, puedes aprender cómo especificar el orden de tus resultados de una operación.

Los ejemplos en esta guía utilizan lo siguiente Course struct como modelo para documentos en la colección courses:

type Course struct {
Title string
Enrollment int32
}

Para ejecutar los ejemplos en esta guía, carga los datos de muestra en la colección db.courses con el siguiente fragmento:

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "World Fiction", Enrollment: 35},
Course{Title: "Abstract Algebra", Enrollment: 60},
Course{Title: "Modern Poetry", Enrollment: 12},
Course{Title: "Plate Tectonics", Enrollment: 35},
}
result, err := coll.InsertMany(context.TODO(), docs)

Tip

Bases de datos y colecciones inexistentes

Si la base de datos y la colección necesarias no existen cuando realizas una operación de guardar, el servidor las crea implícitamente.

Cada documento contiene una descripción de una asignatura universitaria que incluye el título y la cantidad máxima de inscritos, correspondientes a los campos title y enrollment en cada documento.

Para especificar el orden de los resultados, pásese una interfaz que especifique los campos de ordenación y la dirección al método SetSort() de las opciones de una operación.

Las siguientes operaciones toman opciones como un parámetro:

  • Find()

  • FindOne()

  • FindOneAndDelete()

  • FindOneAndUpdate()

  • FindOneAndReplace()

  • gridfs.Bucket.Find()

Puedes establecer una dirección de ordenamiento ascendente o descendente.

Un orden ascendente clasifica tus resultados de menor a mayor. Para especificar esta ordenación, pasa el campo por el que quieras ordenar y 1 al método SetSort().

Tip

Con una ordenación ascendente, el método ordena los valores de tipo Boolean desde false hasta true, los valores de tipo String de la a a la z y los valores de tipo numérico desde infinito negativo a infinito positivo.

El siguiente ejemplo especifica una ordenación ascendente en el campo enrollment:

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", 1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Modern Poetry","enrollment":12}
{"title":"World Fiction","enrollment":35}
{"title":"Plate Tectonics","enrollment":35}
{"title":"Abstract Algebra","enrollment":60}

Una ordenación descendente organiza tus resultados del más grande al más pequeño. Para especificar este orden, pase el campo por el que desea ordenar y -1 al método SetSort().

Tip

Con una clasificación descendente, el método ordena los valores del tipo Boolean desde true hasta false, los valores del tipo String de z a a y los valores del tipo numérico de infinito positivo a infinito negativo.

El siguiente ejemplo especifica una ordenación descendente en el campo enrollment:

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Abstract Algebra","enrollment":60}
{"title":"World Fiction","enrollment":35}
{"title":"Plate Tectonics","enrollment":35}
{"title":"Modern Poetry","enrollment":12}

Se produce un empate cuando dos o más documentos tienen valores idénticos en el campo que se utiliza para ordenar los resultados. MongoDB no garantiza el orden si se producen empates.

Por ejemplo, en los datos de la muestra, hay un empate en enrollment en los siguientes documentos:

{"title":"World Fiction","enrollment":35}
{"title":"Plate Tectonics","enrollment":35}

Puede clasificar en campos adicionales para resolver los empates en la clasificación original. Si desea garantizar un orden específico para los documentos, seleccione campos de clasificación que no den lugar a empates.

El siguiente ejemplo especifica un orden descendente en el campo enrollment, luego un orden ascendente en el campo title:

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}, {"title", 1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Abstract Algebra","enrollment":60}
{"title":"Plate Tectonics","enrollment":35}
{"title":"World Fiction","enrollment":35}
{"title":"Modern Poetry","enrollment":12}

También puede incluir el $sort etapa para especificar una ordenación en una pipeline de agregación.

El siguiente ejemplo especifica un orden descendente en el campo enrollment, luego un orden ascendente en el campo title:

sortStage := bson.D{{"$sort", bson.D{{"enrollment", -1}, {"title", 1}}}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage})
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Abstract Algebra","enrollment":60}
{"title":"Plate Tectonics","enrollment":35}
{"title":"World Fiction","enrollment":35}
{"title":"Modern Poetry","enrollment":12}

Para aprender más sobre las operaciones mencionadas, consulte las siguientes guías:

  • Especifica un query

  • Retrieve Data

  • Operaciones compuestas

  • Agregación

Para aprender sobre cómo ordenar puntuaciones de texto de la búsqueda de texto, consulta Buscar texto.

Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API:

Volver

Valores únicos de campo

En esta página