Menu Docs
Página inicial do Docs
/ / /
Go
/ / /

Contagem de documentos

Nesta página

  • Visão geral
  • Contagem precisa
  • Agregação
  • Contagem estimada
  • Informações adicionais

Neste guia, você pode aprender a obter uma contagem precisa e estimada do número de documentos em sua coleção.

Os exemplos nesta seção usam a seguinte estrutura Tea como um modelo para documentos na coleção tea:

type Tea struct {
Type string
Rating int32
}

Para executar os exemplos neste guia, carregue os dados de amostra na collection do tea no banco de dados do db com o seguinte trecho:

coll := client.Database("db").Collection("tea")
docs := []interface{}{
Tea{Type: "Masala", Rating: 10},
Tea{Type: "Matcha", Rating: 7},
Tea{Type: "Assam", Rating: 4},
Tea{Type: "Oolong", Rating: 9},
Tea{Type: "Chrysanthemum", Rating: 5},
Tea{Type: "Earl Grey", Rating: 8},
Tea{Type: "Jasmine", Rating: 3},
Tea{Type: "English Breakfast", Rating: 6},
Tea{Type: "White Peony", Rating: 4},
}
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 descreve um tipo de chá e sua classificação. Estes itens correspondem aos campos type e rating.

Para contar o número de documentos que correspondem ao seu filtro de queries, utilize o método CountDocuments(). Se você passar por um filtro de queries vazio, esse método retornará o número total de documentos na coleção.

Dica

Quando você usa CountDocuments() para retornar o número total de documentos em uma coleção, o MongoDB executa uma verificação da coleção. Você pode evitar uma verificação da coleção e melhorar o desempenho desse método usando uma dica para aproveitar o índice incorporado no campo _id. Utilize esta técnica somente ao chamar CountDocuments() com um parâmetro de query vazio.

opts := options.Count().SetHint("_id_")
count, err := coll.CountDocuments(context.TODO(), bson.D{}, opts)
if err != nil {
panic(err)
}

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

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 documents with a rating less than six: %d\n", count)

Você também pode incluir o estágio $count para contar o número de documentos em um pipeline de agregação.

O exemplo a seguir executa as seguintes ações:

  • Conta o número de documentos em que o valor do campo rating é maior que 5

  • Atribui a contagem ao campo counted_documents

matchStage := bson.D{{"$match", bson.D{{"rating", bson.D{{"$gt", 5}}}}}}
countStage := bson.D{{"$count", "counted_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)
}

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.

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

O exemplo a seguir estima o número de documentos na coleção tea:

count, err := coll.EstimatedDocumentCount(context.TODO())
if err != nil {
panic(err)
}
fmt.Printf("Estimated number of documents in the tea collection: %d\n", count)

Para saber mais sobre as operações mencionadas, consulte os seguintes guias:

  • Especificar uma query

  • Ignorar resultados devolvidos

  • Limite o número de resultados retornados

  • Agregação

  • Agrupamentos

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

Voltar

Especificar uma query