Ignorar resultados devolvidos
Visão geral
Neste guia, você pode aprender como ignorar um número específico de resultados retornados de operações de leitura.
Dados de amostra
Os exemplos nesta aba usam o seguinte struct Course
como um modelo para documentos na coleção courses
:
type Course struct { Title string Enrollment int32 }
Para executar os exemplos neste guia, carregue estes documentos na collection db.courses
com o seguinte trecho:
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: 45}, } result, err := coll.InsertMany(context.TODO(), docs)
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 descrição de um curso universitário que inclui o nome do curso e o número máximo de matrículas, correspondentes aos campos title
e enrollment
.
Ignorar
Para ignorar um número especificado de resultados retornados de uma query, passe o número de documentos que você deseja ignorar para o método SetSkip()
das opções da operação de leitura.
As seguintes operações de leitura utilizam um objeto de opções como parâmetro:
Find()
FindOne()
CountDocuments()
gridfs.Bucket.Find()
Se o número de documentos exceder o número de documentos correspondentes para uma query, essa query não retornará nenhum documento.
Dica
Passar um número negativo para o método SetSkip()
resulta em um erro de tempo de execução.
Encontre operações que retornam documento em uma ordem de armazenamento que não está classificada em nenhum campo. Para evitar ignorar documentos aleatórios, utilize o método SetSort()
para classificar documentos em um campo com valores únicos antes de definir uma opção ignorar.
Exemplo
O seguinte exemplo executa uma operação do Find()
com o seguinte comportamento:
Classifica os resultados em ordem crescente no campo
enrollment
Pula os dois primeiros documentos
opts := options.Find().SetSort(bson.D{{"enrollment", 1}}).SetSkip(2) cursor, err := coll.Find(context.TODO(), bson.D{}, 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)) }
Agregação
Você também pode incluir o estágio $skip em um aggregation pipeline para ignorar documentos.
Exemplo
O seguinte exemplo executa uma operação do Aggregate()
com o seguinte comportamento:
Classifica os resultados em ordem decrescente no campo
enrollment
Pula o primeiro documento
sortStage := bson.D{{"$sort", bson.D{{"enrollment", -1}}}} skipStage := bson.D{{"$skip", 1}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage, skipStage}) 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)) }
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: