Retrieve Data![](/pt-br/docs/drivers/go/master/assets/link.svg)
Nesta página
Visão geral![](/pt-br/docs/drivers/go/master/assets/link.svg)
Neste guia, você pode aprender como recuperar dados de suas coleções MongoDB usando operações de leitura.
As operações de leitura permitem que fazer o seguinte:
Recupere documentos de suas collections usando operações de localização
Realize transformações em documentos em suas coleções usando operações de agregação
Dados de amostra![](/pt-br/docs/drivers/go/master/assets/link.svg)
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", "Earl Grey"}, {"rating", 5}}, bson.D{{"type", "Masala"}, {"rating", 7}}, bson.D{{"type", "Earl Grey"}, {"rating", 9}}, } 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.
Encontrar operações![](/pt-br/docs/drivers/go/master/assets/link.svg)
Use localizar operações para recuperar dados do MongoDB. As operações de localização consistem nos métodos Find()
e FindOne()
.
Localizar todos os documentos![](/pt-br/docs/drivers/go/master/assets/link.svg)
O método Find()
espera que você passe um tipo Context
e um filtro de query. O método retorna todos os documentos que correspondem ao filtro como um tipo Cursor
.
Para saber como acessar dados em um cursor, consulte Como acessar dados de um cursor.
Encontrar um documento![](/pt-br/docs/drivers/go/master/assets/link.svg)
O método FindOne()
espera que você passe um tipo de Context
e um filtro de query. O método retorna o primeiro documento que corresponde ao filtro como um tipo SingleResult
.
Para saber como acessar dados em um SingleResult
, consulte Unmarshalling.
Modificar comportamento![](/pt-br/docs/drivers/go/master/assets/link.svg)
Você pode modificar o comportamento de Find()
e FindOne()
passando os tipos FindOptions
e FindOneOptions
, respectivamente. Se você não especificar nenhuma opção, o driver usará os valores padrão para cada opção.
Você pode configurar as opções normalmente usadas em ambos os tipos com os seguintes métodos:
Método | Descrição |
---|---|
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetLimit() | The maximum number of documents to return. Default: 0 ObservaçãoEsta opção não está disponível para |
SetProjection() | The fields to include in the returned documents. Default: nil |
SetSkip() | The number of documents to skip. Default: 0 |
SetSort() | The field and type of sort to order the matched documents. You can specify an ascending or descending sort. Default: none |
Exemplo![](/pt-br/docs/drivers/go/master/assets/link.svg)
O exemplo seguinte passa um contexto, filtro e FindOptions
para o método Find()
, que executa as seguintes ações:
Corresponde a documentos em que
rating
está entre5
e10
Retorna
type
erating
, mas exclui_id
filter := bson.D{ {"$and", bson.A{ bson.D{{"rating", bson.D{{"$gt", 5}}}}, bson.D{{"rating", bson.D{{"$lt", 10}}}}, }}, } projection := bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}} opts := options.Find().SetProjection(projection) cursor, err := coll.Find(context.TODO(), filter, 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) }
Exemplo![](/pt-br/docs/drivers/go/master/assets/link.svg)
O exemplo seguinte passa um contexto, filtro e FindOneOptions
para o método FindOne()
, que executa as seguintes ações:
Corresponde a todos os documentos
Uma classificação decrescente no campo
rating
Retorna
type
erating
, mas exclui_id
filter := bson.D{} sort := bson.D{{"rating", -1}} projection := bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}} opts := options.FindOne().SetSort(sort).SetProjection(projection) var result bson.D err := coll.FindOne(context.TODO(), filter, opts).Decode(&result) if err != nil { panic(err) } fmt.Println(result)
Operações de agregação![](/pt-br/docs/drivers/go/master/assets/link.svg)
Use operações de aggregation para recuperar e transformar dados do MongoDB. Execute operações de aggregation usando o método Aggregate()
.
Agregação![](/pt-br/docs/drivers/go/master/assets/link.svg)
O método Aggregate()
espera que você passe um tipo Context
e um pipeline de agregação. Um pipeline de agregação define como transformar dados por meio de estágios. Algumas das etapas são combinar documentos, renomear campos e agrupar valores.
O método retorna os documentos resultantes em um tipo Cursor
. Se você omitir o estágio $match, o pipeline continuará usando todos os documentos da coleção.
Para saber como acessar dados em um cursor, consulte Como acessar dados de um cursor.
Modificar comportamento![](/pt-br/docs/drivers/go/master/assets/link.svg)
O método Aggregate()
opcionalmente usa um tipo AggregateOptions
, que representa opções que você pode usar para modificar seu comportamento. Se você não especificar nenhuma opção, o driver usará os valores padrão para cada opção.
O tipo AggregateOptions
permite a você configurar opções com os seguintes métodos:
Método | Descrição |
---|---|
SetAllowDiskUse() | Whether to write to temporary files. Default: false |
SetBatchSize() | The number of documents to return in each batch. Default: none |
SetBypassDocumentValidation() | Whether to allow the write to opt-out of document level validation. Default: false |
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
SetMaxAwaitTime() | The maximum amount of time for the server to wait on new documents to satisfy a tailable cursor query. Default: nil |
SetComment() | An arbitrary string to help trace the operation through the database profiler, currentOp and logs. Default: "" |
SetHint() | The index to use to scan for documents to retrieve. Default: nil |
SetLet() | Specifies parameters for the aggregate expression, which improves command readability by separating the variables from the query text. Default: none |
Exemplo![](/pt-br/docs/drivers/go/master/assets/link.svg)
O exemplo abaixo passa um contexto e uma aggregation pipeline que executa as seguintes ações:
Agrupa avaliações por tipos
Calcula a classificação média de cada tipo
groupStage := bson.D{ {"$group", bson.D{ {"_id", "$type"}, {"average", bson.D{ {"$avg", "$rating"}, }}, }}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{groupStage}) if err != nil { panic(err) } var results []bson.M if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Printf("%v has an average rating of %v \n", result["_id"], result["average"]) }
Para saber mais sobre como construir um pipeline de agregação, consulte a página manual do servidor MongoDB em Agregação.
Informações adicionais![](/pt-br/docs/drivers/go/master/assets/link.svg)
Para obter exemplos executáveis das operações de localização, consulte os seguintes exemplos de uso:
Para saber mais sobre as operações mencionadas, consulte os seguintes guias:
Documentação da API![](/pt-br/docs/drivers/go/master/assets/link.svg)
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: