Especifique quais campos retornar
Nesta página
Visão geral
Neste guia, você aprenderá a especificar quais campos retornar em um documento.
Dados de amostra
Os exemplos nesta aba usam o seguinte struct Course
como um modelo para documentos na coleção courses
:
type Course struct { Title string `bson:"title,omitempty"` CourseId string `bson:"course_id,omitempty"` Enrollment int32 `bson:"enrollment,omitempty"` }
Atag struct omitempty
orienta o driver a excluir os campos ao desmarcar com base em sua especificação de projeção.
Para executar os exemplos nesta aba, carregue os dados de amostra na coleção db.courses
com o seguinte trecho:
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)
Dica
Bancos de Dados e Coleções Inexistentes
Se o banco de dados e a collection necessários não existirem quando você executar uma operação de escrita, o servidor implicitamente os criará.
Cada documento contém uma descrição de um curso universitário que inclui o nome do curso, o ID do curso e o número máximo de matrículas, correspondentes aos campos title
, course_id
e enrollment
em cada documento.
Projeção
Uma projeção especifica quais campos retornar em documentos correspondentes. O documento de projeção contém nomes de campo com um 1
para incluir o campo correspondente ou 0
para excluí-lo. Se você estiver usando uma estrutura de agregação, também poderá especificar uma projeção para incluir campos recém-computados.
Você pode especificar uma projeção passando um documento de projeção para o método SetProjection()
. As operações a seguir usam um objeto de opções como parâmetro:
Find()
FindOne()
FindOneAndDelete()
FindOneAndReplace()
FindOneAndUpdate()
Dica
Se você não especificar uma projeção, a operação retornará todos os campos em documentos correspondentes.
Excluir um campo
Para excluir um campo, passe o campo que você deseja excluir com um 0
para o método SetProjection()
. O driver inclui todos os campos não explicitamente excluídos no documento de projeção, se você especificar quaisquer campos a serem excluídos.
Exemplo
O exemplo seguinte exclui os campos course_id
e enrollment
dos documentos correspondentes retornados pelo 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)) }
Incluir um campo
Para incluir um campo, passe o campo que você deseja incluir com um 1
para o método SetProjection()
. O driver exclui todos os campos que não estão explicitamente incluídos no documento de projeção, se você especificar quaisquer campos a serem incluídos.
Exemplo
O exemplo seguinte inclui somente os campos title
e enrollment
dos documentos correspondentes retornados pelo 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)) }
Agregação
Você também pode criar um estágio $project para especificar uma projeção em um pipeline de agregação.
Exemplo
O exemplo seguinte inclui somente os campos title
e course_id
dos documentos correspondentes retornados pelo 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)) }
Informações adicionais
Para saber mais sobre as operações mencionadas, consulte os seguintes guias:
Para saber mais sobre como projetar pontuações de texto a partir de sua pesquisa de texto, consulte procurar texto.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: