Especifique quais campos retornar
Nesta página
Visão geral
Neste guia, você aprenderá a especificar quais campos retornar em um documento de operações de leitura.
Dados de amostra
Para executar os exemplos neste guia, carregue estes documentos na collection tea.ratings
com o seguinte trecho:
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Assam"}, {"rating", 5}}, bson.D{{"type", "Oolong"}, {"rating", 7}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "English Breakfast"}, {"rating", 5}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
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 classificação para um tipo de chá que corresponde aos campos type
e rating
.
Observação
Cada exemplo trunca o valor ObjectID
porque o driver o gera exclusivamente.
Projeção
Uma projeção especifica quais campos retornar em documentos correspondentes. Ele contém nomes de campo seguidos por um 1
(para incluir) ou 0
(para excluir). As projeções só podem incluir ou excluir campos.
Você pode especificar uma projeção passando um para o método SetProjection()
nas opções dos seguintes métodos de operação de leitura:
Find()
FindOne()
FindOneAndDelete()
FindOneAndReplace()
FindOneAndUpdate()
Dica
Se você não especificar uma projeção, a operação de leitura retornará todos os campos em documentos correspondentes.
Excluir um campo
Para excluir um campo, passe o campo que você deseja excluir e um 0
para o método SetProjection()
. Para todos os campos que você não lista explicitamente na projeção, o driver os inclui.
Exemplo
O exemplo seguinte exclui o rating
dos documentos correspondentes do método Find()
:
opts := options.Find().SetProjection(bson.D{{"rating", 0}}) cursor, err := coll.Find(context.TODO(), bson.D{}, opts) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Incluir um campo
Para incluir um campo, passe o campo que você deseja incluir e um 1
para o método SetProjection()
. Para todos os campos que você não lista explicitamente na projeção, o driver os exclui.
Importante
Você pode excluir o campo _id
mesmo se tiver especificado para incluir determinados campos. Por padrão, o driver inclui o campo _id
. Você deve excluir explicitamente o campo _id
se não desejar que ele seja gerado.
Exemplo
O exemplo a seguir executa a seguinte projeção nos documentos correspondentes a partir do método Find()
:
Inclua o campo
type
erating
Exclua o campo
_id
opts := options.Find().SetProjection(bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}}) cursor, err := coll.Find(context.TODO(), bson.D{}, opts) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Agregação
Você também pode incluir o estágio do projeto $ para especificar uma projeção em um agregação pipeline.
Exemplo
O exemplo a seguir executa a seguinte projeção nos documentos correspondentes a partir do método Aggregate()
:
Inclua o campo
type
erating
Exclua o campo
_id
projectStage := bson.D{{"$project", bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}}}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{projectStage}) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
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: