Overview
En esta guía, puedes aprender cómo recuperar valores únicos para un campo específico en una sola colección.
Datos de muestra
El ejemplo en esta guía utiliza lo siguiente Course Estructura como modelo para los documentos de la colección courses:
type Course struct { Title string Department string Enrollment int32 }
Para ejecutar el ejemplo, cargue los datos de muestra en la colección db.courses con el siguiente snippet:
coll := client.Database("db").Collection("courses") docs := []any{ 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)
Tip
Bases de datos y colecciones inexistentes
Si la base de datos y la colección necesarias no existen cuando realizas una operación de guardar, el servidor las crea implícitamente.
Cada documento contiene una descripción de un curso universitario que incluye el título del curso, el departamento y la inscripción. Estos elementos corresponden a los campos title, department y enrollment en cada documento.
distinct
Para recuperar valores distintos para un campo específico en una sola colección, pase los siguientes parámetros al método Distinct():
El nombre de campo para el que desea recuperar los valores distintos
Un
non-nilfiltro de query que especifica qué documentos coincidirán
Tip
Si especifica un filtro de consulta vacío, el método Distinct() busca valores distintos en todos los documentos de una colección.
Modificar comportamiento
Puede modificar el comportamiento del método Distinct() pasando un DistinctOptions. Si no especifica un DistinctOptions, el controlador utiliza los valores predeterminados para cada opción.
El tipo DistinctOptions te permite configurar opciones con los siguientes métodos:
Método | Descripción |
|---|---|
| The type of language collation to use when sorting results. Default: nil |
| Sets a comment to attach to the distinct operation. Default: nil |
Ejemplo
El siguiente ejemplo selecciona los documentos con un valor inferior a 50 en el campo enrollment y muestra los valores distintivos del campo department utilizando el 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]
Ejemplo de recuperación de valores distintos: archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para obtener más información sobre cómo conectar con su instancia de MongoDB, consulte Crear un MongoClient. Este ejemplo también usa la colección restaurants en la base de datos sample_restaurants incluida en la Conjuntos de datos de ejemplo de Atlas. Puedes cargarlos en tu base de datos en la versión gratuita de MongoDB Atlas siguiendo los pasos que se indican en la guía "Primeros pasos con Atlas".
Este ejemplo realiza las siguientes acciones en la colección restaurant:
Coincide con los documentos en los que el valor del campo
cuisinees"Tapas"Devuelve los valores distintos del campo
boroughde los documentos coincidentes
// 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/es/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
Información Adicional
Para obtener información sobre cómo construir un filtro de consulta, consulte Especificar una consulta.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API: