Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Contagem de documentos

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

Os exemplos nesta seção usam o seguinte struct 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 := []any{ 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()

O tipo de agrupamento de idiomas a ser usado ao classificar os resultados.
Padrão: nil

SetHint()

O índice a ser usado para procurar documentos a serem contados.
Padrão: nil

SetLimit()

O número máximo de documentos a serem contados.
Padrão: 0

SetSkip()

O número de documentos a ignorar antes de contar.
Padrão: 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.Dif 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 que você configure opções usando os seguintes métodos:

Método
Descrição

SetComment()

Define um comentário para anexar à operação de contagem.
Padrão: 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)

Observação

Exemplo de configuração

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte Criar um MongoClient. Este exemplo também usa a coleção restaurants no banco de dados sample_restaurants incluído nos conjuntos de dados de amostra do Atlas. Você pode carregá-los em seu banco de dados em um cluster gratuito no MongoDB Atlas seguindo as etapas em Introdução ao Atlas.

Este exemplo executa o seguinte na coleção restaurants:

  • Estima o número de documentos na coleção

  • Conta o número de documentos em que o valor do campo cuisine é "American"

// Counts documents in a collection by using the Go driverpackage main import ( "context" "fmt" "log" "os" "github.com/joho/godotenv" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options") type Restaurant struct { ID bson.ObjectID `bson:"_id"` Name string RestaurantId string `bson:"restaurant_id"` Cuisine string Address interface{} Borough string Grades interface{}} func main() { if err := godotenv.Load(); err != nil { log.Println("No .env file found") } var uri string if uri = os.Getenv("MONGODB_URI"); uri == "" { log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://www.mongodb.com/pt-br/docs/drivers/go/current/usage-examples/#environment-variable") } client, err := mongo.Connect(options.Client().ApplyURI(uri)) if err != nil { panic(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { panic(err) } }() coll := client.Database("sample_restaurants").Collection("restaurants") // Specifies a filter to match documents where the "cuisine" field // has a value of "American" filter := bson.D{{"cuisine", "American"}} // Retrieves and prints the estimated number of documents in the collection estCount, estCountErr := coll.EstimatedDocumentCount(context.TODO()) if estCountErr != nil { panic(estCountErr) } // Retrieves and prints the number of matching documents in the collection count, err := coll.CountDocuments(context.TODO(), filter) if err != nil { panic(err) } // When you run this file, it should print: // Estimated number of documents in the movies collection: 25359 // Number of restaurants with American cuisine: 6183 fmt.Printf("Estimated number of documents in the restaurants collection: %d\n", estCount) fmt.Printf("Number of restaurants with American cuisine: %d\n", count)}

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

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