Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Retrieve Distinct Values

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

El ejemplo en esta guía utiliza la siguiente estructura Course como modelo para documentos en 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.

Para recuperar valores distintos de un campo especificado en una sola colección, pasa los siguientes parámetros al método Distinct():

  • El nombre de campo para el que desea recuperar los valores distintos

  • Un non-nil filtro de query que especifica qué documentos coincidirán

Tip

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

Puedes modificar el comportamiento del método Distinct() pasando un DistinctOptions. Si no se especifica un DistinctOptions, el driver utiliza los valores por defecto para cada opción.

El tipo DistinctOptions te permite configurar opciones con los siguientes métodos:

Método
Descripción

SetCollation()

El tipo de intercalación de lenguaje que se debe usar al clasificar los resultados.
Por defecto: nil

SetComment()

Establece un comentario para adjuntar a la operación distinta.
Por defecto: nil

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]

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para aprender más sobre cómo conectarte a tu instancia de MongoDB, consulta Crear un MongoClient. Este ejemplo también utiliza la colección restaurants en la base de datos sample_restaurants incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo los pasos en Introducción a Atlas.

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

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

  • Devuelve los 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 aprender a construir un filtro de query, consulte Especificar una query.

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: