Menu Docs
Página inicial do Docs
/ / /
Go
/ / /

Especifique quais campos retornar

Nesta página

  • Visão geral
  • Dados de amostra
  • Projeção
  • Excluir um campo
  • Incluir um campo
  • Agregação
  • Informações adicionais
  • Documentação da API

Neste guia, você aprenderá a especificar quais campos retornar em um documento.

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.

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.

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.

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))
}

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.

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))
}

Você também pode criar um estágio $project para especificar uma projeção em um pipeline de agregação.

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))
}

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.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Limite o número de resultados retornados