Menu Docs

Página inicial do DocsGo

Retrieve Data

Nesta página

  • Visão geral
  • Dados de amostra
  • Encontrar operações
  • Localizar todos os documentos
  • Encontrar um documento
  • Modificar comportamento
  • Operações de agregação
  • Agregação
  • Modificar comportamento
  • Informações adicionais
  • Documentação da API

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

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.

Use localizar operações para recuperar dados do MongoDB. As operações de localização consistem nos métodos Find() e FindOne().

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.

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.

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ção

Esta opção não está disponível para FindOneOptions. O método FindOne() utiliza internamente SetLimit(-1).

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

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á entre 5 e 10

  • Retorna type e rating, 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)
}

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 e rating, 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)

Use operações de aggregation para recuperar e transformar dados do MongoDB. Execute operações de aggregation usando o método Aggregate().

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.

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

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.

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:

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

←  Contagem de documentosAcessar dados de um cursor →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.