Retrieve Data
Nesta página
Visão geral
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
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
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
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
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
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
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
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
Use operações de aggregation para recuperar e transformar dados do MongoDB. Execute operações de aggregation usando o método Aggregate()
.
Agregação
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
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
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
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
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: