Contagem de documentos
Visão geral
Neste guia, você pode aprender a obter uma contagem precisa e estimada do número de documentos em sua coleção.
Dados de amostra
Para executar os exemplos neste guia, carregue os dados de amostra 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", "Matcha"}, {"rating", 7}}, bson.D{{"type", "Assam"}, {"rating", 4}}, bson.D{{"type", "Oolong"}, {"rating", 9}}, bson.D{{"type", "Chrysanthemum"}, {"rating", 5}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "Jasmine"}, {"rating", 3}}, bson.D{{"type", "English Breakfast"}, {"rating", 6}}, bson.D{{"type", "White Peony"}, {"rating", 4}}, } 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
.
Contagem precisa
Para contar o número de documentos que correspondem ao seu filtro de queries, utilize o método CountDocuments()
.
Dica
Se você passar por um filtro de queries vazio, esse método retornará o número total de documentos na coleção.
Modificar comportamento
Você pode modificar o comportamento de CountDocuments()
passando a um tipo CountOptions
. Se você não especificar nenhuma opção, o driver usará seus valores padrão.
O tipo CountOptions
permite a você configurar opções com os seguintes métodos:
Método | Descrição |
---|---|
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetHint() | The index to use to scan for documents to count. Default: nil |
SetLimit() | The maximum number of documents to count. Default: 0 |
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
SetSkip() | The number of documents to skip before counting. Default: 0 |
Exemplo
O exemplo a seguir conta o número de documentos em que o rating
é menor que 6
:
filter := bson.D{{"rating", bson.D{{"$lt", 6}}}} count, err := coll.CountDocuments(context.TODO(), filter) if err != nil { panic(err) } fmt.Printf("Number of ratings less than six: %d\n", count)
Agregação
Você também pode incluir o estágio $count para contar o número de documentos em um pipeline de agregação.
Exemplo
O exemplo a seguir executa as seguintes ações:
Conta o número de documentos em que o
rating
é maior que5
Atribui a contagem a um campo chamado
total_documents
matchStage := bson.D{{"$match", bson.D{{"rating", bson.D{{"$gt", 5}}}}}} countStage := bson.D{{"$count", "total_documents"}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{matchStage, countStage}) 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) }
Contagem estimada
Para estimar o número de documentos em sua coleção, use o método EstimatedDocumentCount()
.
Observação
O método EstimatedDocumentCount()
é mais rápido do que o método CountDocuments()
, pois usa os metadados da coleção em vez de fazer a varredura de toda a coleção.
Modificar comportamento
Você pode modificar o comportamento de EstimatedDocumentCount()
passando um tipo EstimatedDocumentCountOptions
. Se você não especificar nenhuma opção, o driver usará os valores padrão.
O tipo EstimatedDocumentCountOptions
permite a você configurar opções com os seguintes métodos:
Método | Descrição |
---|---|
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
Exemplo
O exemplo a seguir estima o número de documentos na coleção ratings
:
count, err := coll.EstimatedDocumentCount(context.TODO()) if err != nil { panic(err) } fmt.Printf("Estimated number of documents in the ratings collection: %d\n", count)
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: