Docs Menu
Docs Home
/ /

Retrieve Distinct Values

En esta guía, puede aprender cómo recuperar valores distintos para un campo específico en una sola colección.

El ejemplo de 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 fragmento:

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 realiza una operación de escritura, el servidor las crea implícitamente.

Cada documento contiene la descripción de un curso universitario, que incluye el título, el departamento y la matrícula. Estos elementos corresponden a los campos title, department y enrollment de cada documento.

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 del campo para el que desea recuperar los valores distintos

  • Un filtro de consulta non-nil que especifica qué documentos hacer coincidir

Tip

Si especifica un filtro de consulta vacío, el método Distinct() busca valores distintos en todos los documentos de una colección.

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 le permite configurar opciones con los siguientes métodos:

Método
Descripción

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

El siguiente ejemplo coincide con documentos con un valor de campo enrollment menor que 50 e imprime los valores distintos 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]

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte Cree una guía de MongoClient. Este ejemplo también utiliza la restaurants colección en la sample_restaurants base de datos incluida en el Conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la Guía de introducción a Atlas.

Este ejemplo realiza las siguientes acciones en la colección restaurant:

  • Coincide con los documentos en los que el valor del campo cuisine es "Tapas"

  • Devuelve valores distintos del campo borough de 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

Para obtener información sobre cómo construir un filtro de consulta, consulte Especificar una consulta.

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:

Volver

Contabilizar documentos

En esta página