Limite o número de resultados retornados
Visão geral
Nesta aba, você pode saber como limitar o número de documentos retornados de uma operação 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.
Limite
Para limitar o número de documentos retornados de uma consulta, passe o número de documentos que você deseja retornar ao método SetLimit()
das opções da operação de leitura.
Especifique as opções como o último parâmetro para os seguintes métodos de operação de leitura:
Find()
CountDocuments()
gridfs.Bucket.Find()
Se o limite for 0
ou exceder o número de documentos correspondentes, o método retornará todos os documentos. Se o limite for um número negativo, o método se comportará como se o limite fosse o valor absoluto do número negativo e fechará o cursor após a recuperação dos documentos.
Exemplo
O exemplo a seguir mostra como gerar dois documentos:
filter := bson.D{} opts := options.Find().SetLimit(2) 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) }
Várias Opções
Se você configurar outras opções junto com o método SetLimit()
, o driver executará o limite por último, independentemente da ordem em que você listar as opções.
Exemplo
O exemplo a seguir executa as seguintes ações em ordem usando o método Find()
:
Classificar o campo
rating
em ordem decrescenteIgnorar o primeiro documento
Devolva os dois primeiros documentos restantes
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", -1}}).SetLimit(2).SetSkip(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) }
Dica
Usar qualquer uma das seguintes declarações de opção também produz o mesmo resultado:
multiOptions := options.Find().SetSort(bson.D{{"rating", -1}}).SetSkip(1).SetLimit(2) multiOptions := options.Find().SetLimit(2).SetSort(bson.D{{"rating", -1}}).SetSkip(1) multiOptions := options.Find().SetLimit(2).SetSkip(1).SetSort(bson.D{{"rating", -1}}) multiOptions := options.Find().SetSkip(1).SetSort(bson.D{{"rating", -1}}).SetLimit(2) multiOptions := options.Find().SetSkip(1).SetLimit(2).SetSort(bson.D{{"rating", -1}})
Agregação
Você também pode incluir o estágio $limit para especificar um limite em uma pipeline de agregação.
Exemplo
O exemplo a seguir mostra como gerar três documentos:
limitStage := bson.D{{"$limit", 3}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{limitStage}) 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:
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: