Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver GO
/ /

Retrieve Distinct Values

Neste guia, você pode aprender como recuperar valores distintos para um campo especificado em uma única collection.

O exemplo nesta aba usa o seguinte struct Course como um modelo para documentos na collection courses:

type Course struct {
Title string
Department string
Enrollment int32
}

Para executar o exemplo, carregue os dados de amostra na coleção db.courses com o seguinte trecho:

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "World Fiction", Department: "English", Enrollment: 35},
Course{Title: "Abstract Algebra", Department: "Mathematics", Enrollment: 60},
Course{Title: "Modern Poetry", Department: "English", Enrollment: 12},
Course{Title: "Plate Tectonics", Department: "Geology", Enrollment: 30},
}
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, o departamento e a inscrição. Estes itens correspondem aos campos title , department e enrollment em cada documento.

Para recuperar valores distintos para um campo especificado em uma única collection, passe os seguintes parâmetros para o método Distinct() :

  • O nome do campo para o qual você deseja recuperar os valores distintos

  • Um filtro de query non-nil especificando quais documentos devem ser correspondidos

Dica

Se você especificar um filtro de query vazio, o método Distinct() pesquisará valores distintos em todos os documentos de uma collection.

Você pode modificar o comportamento do método Distinct() passando um DistinctOptions. Se você não especificar um DistinctOptions, o driver utilizará os valores padrão para cada opção.

O tipo DistinctOptions 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

SetComment()

Sets a comment to attach to the distinct operation.
Default: nil

O exemplo a seguir corresponde a documentos com um valor de campo enrollment menor que 50 e imprime os valores distintos do campo department usando o método Distinct():

filter := bson.D{{"enrollment", bson.D{{"$lt", 50}}}}
var arr []string
err = coll.Distinct(context.TODO(), "department", filter).Decode(&arr)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", arr)
[English Geology]

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 o guia Criar um MongoClient. Este exemplo também utiliza a coleção do restaurants no banco de dados do sample_restaurants incluído nosconjuntos de dados de amostra do Atlas do . Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o Guia de Introdução ao Atlas.

Este exemplo executa as seguintes ações na coleção restaurant:

  • Corresponde a documentos em que o valor do campo cuisine é "Tapas"

  • Retorna valores distintos do campo borough dos documentos correspondentes

// Retrieves distinct values of a field by using the Go driver
package 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)
}
}()
// Filters the collection for documents where the value of cuisine is "Tapas"
coll := client.Database("sample_restaurants").Collection("restaurants")
filter := bson.D{{"cuisine", "Tapas"}}
// Retrieves the distinct values of the "borough" field in documents
// that match the filter
var arr []string
err = coll.Distinct(context.TODO(), "borough", filter).Decode(&arr)
if err != nil {
panic(err)
}
// Prints the distinct "borough" values
for _, result := range arr {
fmt.Println(result)
}
// When you run this file, it should print:
// Brooklyn
// Manhattan
// Queens
}
Brooklyn
Manhattan
Queens

Para saber mais sobre a construção de um filtro de query, consulte Especificar uma query.

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

Voltar

Contagem de documentos

Nesta página