Docs Menu
Docs Home
/ /

Especifica qué campos se deben devolver

En esta guía, puede aprender a especificar qué campos devolver en un documento.

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

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

El omitempty La etiqueta struct le indica al controlador que excluya campos al desagrupar según su especificación de proyección.

Para ejecutar los ejemplos de esta guía, 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: "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 realiza una operación de escritura, 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 la inscripción máxima, correspondientes a los campos title, course_id y enrollment en cada documento.

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

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 especifica una proyección, la operación devuelve todos los campos de los documentos coincidentes.

Para excluir un campo, páselo con un 0 al método SetProjection(). El controlador incluye todos los campos que no están excluidos explícitamente en el documento de proyección, si especifica alguno para excluir.

El siguiente ejemplo excluye los campos course_id y enrollment de los documentos coincidentes 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, páselo con un 1 al método SetProjection(). El controlador excluye todos los campos que no estén incluidos explícitamente en el documento de proyección si especifica alguno 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 Etapa del proyecto para especificar una proyección en una canalización 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 obtener más información sobre las operaciones mencionadas, consulte las siguientes guías:

Para obtener más información sobre cómo proyectar puntuaciones de texto a partir de sus consultas de texto, consulte Realizar una consulta de 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

Especifica los documentos a devolver

En esta página