Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Especifica qué campos se deben devolver

En esta guía, puedes aprender cómo especificar qué campos se deben devolver en un documento.

Los ejemplos en esta guía utilizan lo siguiente Course struct como modelo para documentos en la colección courses:

type Course struct {
Title string `bson:"title,omitempty"`
CourseId string `bson:"course_id,omitempty"`
Enrollment int32 `bson:"enrollment,omitempty"`
}

La omitempty struct etiqueta dirige al driver a excluir campos al deserializar según tu especificación de proyección.

Para ejecutar los ejemplos en esta guía, carga los datos de muestra en la colección db.courses con el siguiente fragmento:

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "Primate Behavior", CourseId: "PSY2030", Enrollment: 40},
Course{Title: "Revolution and Reform", CourseId: "HIST3080", Enrollment: 12},
}
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 ID del curso y el cupo máximo, correspondientes a los campos title, course_id y enrollment en cada documento.

Una proyección especifica qué campos se deben devolver en los documentos coincidentes. El documento de proyección contiene nombres de campos con un 1 para incluir el campo correspondiente o 0 para excluirlo. Si estás utilizando un marco de agregación, también puedes especificar una proyección para incluir los campos recién calculados.

Se puede especificar una proyección pasando un documento de proyección al método SetProjection(). Las siguientes operaciones toman un objeto de opciones como parámetro:

  • Find()

  • FindOne()

  • FindOneAndDelete()

  • FindOneAndReplace()

  • FindOneAndUpdate()

Tip

Si no especificas una proyección, la operación devuelve todos los campos de los documentos coincidentes.

Para excluir un campo, pasa el campo que quieres excluir con un 0 al método SetProjection(). El driver incluye todos los campos que no se excluyen explícitamente en el documento de proyección, si se especifica algún campo para excluir.

El siguiente ejemplo excluye los campos course_id y enrollment de los documentos que coinciden devueltos por el método Find():

filter := bson.D{}
opts := options.Find().SetProjection(bson.D{{"course_id", 0}, {"enrollment", 0}})
cursor, err := coll.Find(context.TODO(), filter, opts)
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Primate Behavior"}
{"title":"Revolution and Reform"}

Para incluir un campo, pasa el campo que deseas incluir con un 1 al método SetProjection(). El driver excluye todos los campos que no estén explícitamente incluidos en el documento de proyección, si se especifican campos para incluir.

El siguiente ejemplo incluye solo los campos title y enrollment de los documentos coincidentes devueltos por el método Find():

filter := bson.D{}
opts := options.Find().SetProjection(bson.D{{"title", 1}, {"enrollment", 1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Primate Behavior","enrollment":40}
{"title":"Revolution and Reform","enrollment":12}

También puedes crear un $project etapa para especificar una proyección en una pipeline de agregación.

El siguiente ejemplo incluye solo los campos title y course_id de los documentos coincidentes devueltos por el método Aggregate():

projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"course_id", 1}}}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{projectStage})
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Primate Behavior","course_id":"PSY2030"}
{"title":"Revolution and Reform","course_id":"HIST3080"}

Para aprender más sobre las operaciones mencionadas, consulte las siguientes guías:

Para aprender a proyectar puntuaciones de texto a partir de la búsqueda de texto, consulte Buscar texto.

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

Limitar los resultados

En esta página