Classificar resultados
Nesta página
Visão geral
Neste guia, você pode aprender como especificar a ordem dos seus resultados das operações de leitura.
Dados de amostra
Para executar os exemplos neste guia, carregue estes documentos na collection tea.ratings
com o seguinte trecho:
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Assam"}, {"rating", 5}}, bson.D{{"type", "Oolong"}, {"rating", 7}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "English Breakfast"}, {"rating", 5}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
Dica
Bancos de Dados e Coleções Inexistentes
Se o banco de dados e a collection necessários não existirem quando você executar uma operação de escrita, o servidor implicitamente os criará.
Cada documento contém uma classificação para um tipo de chá que corresponde aos campos type
e rating
.
Observação
Cada exemplo trunca o valor ObjectID
porque o driver o gera exclusivamente.
Direção de classificação
Para especificar a ordem dos seus resultados, passe uma interface especificando os campos de classificação e direções para o método SetSort()
das opções de uma operação de leitura.
Especifique as opções como o último parâmetro para os seguintes métodos de operação de leitura:
Find()
FindOne()
FindOneAndDelete()
FindOneAndUpdate()
FindOneAndReplace()
gridfs.Bucket.Find()
A direção de classificação pode ser ascendente ou descendente.
Ascendente
Uma classificação crescente ordena seus resultados do menor para o maior. Para especificar esta classificação, passe o campo pelo qual você deseja classificar e 1
para o método SetSort()
.
Dica
Com uma classificação ascendente, o método ordena valores do tipo Boolean
de false
a true
, valores do tipo String
de a a z e valores do tipo numérico de infinito negativo a infinito positivo.
Exemplo
O exemplo a seguir especifica uma classificação crescente no campo rating
:
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", 1}}) cursor, err := coll.Find(context.TODO(), filter, opts) var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Descendente
Uma classificação decrescente ordena seus resultados do maior para o menor. Para especificar essa classificação, passe o campo pelo qual você deseja classificar e -1
para o método SetSort()
.
Dica
Com uma classificação decrescente, o método ordena valores de tipo Boolean
de true
para false
, String
valores de tipo de z para um e valores de tipo numérico de infinito positivo para infinito negativo.
Exemplo
O exemplo seguinte especifica uma classificação decrescente no campo rating
:
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", -1}}) cursor, err := coll.Find(context.TODO(), filter, opts) var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Lidar com empates
Um empate ocorre quando dois ou mais documentos têm valores idênticos no campo que você está usando para classificar seus resultados. O MongoDB não garante a ordem se ocorrerem empates.
Por exemplo, nos dados de amostra, há uma vínculo para o rating
nos seguintes documentos:
[{_id ObjectID("...")} {type Assam} {rating 5}] [{_id ObjectID("...")} {type English Breakfast} {rating 5}]
Para garantir uma ordem específica para documentos quando ocorrerem empates, especifique campos adicionais para classificação.
Exemplo
O exemplo a seguir especifica uma classificação ascendente no campo rating
e, em seguida, uma classificação descendente no campo type
:
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", 1}, {"type", -1}}) cursor, err := coll.Find(context.TODO(), filter, opts) var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Agregação
Você também pode incluir o estágio $sort para especificar uma classificação em um pipeline de agregação.
Exemplo
O exemplo a seguir especifica uma classificação descendente no campo rating
e, em seguida, uma classificação ascendente no campo type
:
sortStage := bson.D{{"$sort", bson.D{{"rating", -1}, {"type", 1}}}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage}) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Informações adicionais
Para saber mais sobre as operações mencionadas, consulte os seguintes guias:
Para saber como classificar as pontuações de textos da sua pesquisa de textos, consulte Buscar textos.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: