Menu Docs

Página inicial do DocsGo

Classificar resultados

Nesta página

  • Visão geral
  • Dados de amostra
  • Direção de classificação
  • Ascendente
  • Descendente
  • Lidar com empates
  • Agregação
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como especificar a ordem dos seus resultados das operações de leitura.

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.

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.

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.

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)
}

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.

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)
}

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.

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)
}

Você também pode incluir o estágio $sort para especificar uma classificação em um pipeline de agregação.

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)
}

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.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

←  Retrieve Distinct ValuesIgnorar resultados devolvidos →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.