Menu Docs

Página inicial do DocsGo

Acessar dados de um cursor

Nesta página

  • Visão geral
  • Amostra de cursor
  • Recuperar documentos individualmente
  • Cursor atualizado
  • Recuperar todos os documentos
  • Fechar o cursor
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como acessar dados com um cursor.

Um cursor é um mecanismo que permite que um aplicação itere sobre os resultados do banco de dados de dados enquanto mantém apenas um subconjunto deles na memória em determinado momento. Operações de leitura que correspondem a vários documentos usam um cursor para retornar esses documentos em lotes em vez de todos de uma vez.

Cada seção usa a seguinte variável cursor, que é um Cursor estruturado contendo todos os documentos em uma coleção:

cursor, err := coll.Find(context.TODO(), bson.D{})
if err != nil {
panic(err)
}

Importante

Um cursor não é groutine seguro. Não use o mesmo cursor em várias goroutines ao mesmo tempo.

Para recuperar documentos do cursor individualmente enquanto bloqueia a goroutine atual, use o método Next().

O método retorna um documento se cada um dos seguintes for verdadeiro:

  • Um documento está atualmente ou estará disponível posteriormente

  • Não ocorreram erros

  • O contexto não expirou

for cursor.Next(context.TODO()) {
var result bson.D
if err := cursor.Decode(&result); err != nil {
log.Fatal(err)
}
fmt.Println(result)
}
if err := cursor.Err(); err != nil {
log.Fatal(err)
}

Para tentar recuperar um documento de umcursor persistente , use o método TryNext() .

O método retorna um documento se cada um dos seguintes for verdadeiro:

  • Um documento está atualmente disponível

  • Não ocorreram erros

  • O contexto não expirou

for {
if cursor.TryNext(context.TODO()) {
var result bson.D
if err := cursor.Decode(&result); err != nil {
log.Fatal(err)
}
fmt.Println(result)
continue
}
if err := cursor.Err(); err != nil {
log.Fatal(err)
}
if cursor.ID() == 0 {
break
}
}

Para preencher uma array com todos os seus resultados de query, utilize o método All():

var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}

Importante

Memória

Se o número e o tamanho dos documentos retornados pela sua query excederem a memória disponível do aplicativo, seu programa falhará. Se você não tiver um definir grande, deverá consumir o cursor iterativamente.

Quando seu aplicação não precisar mais usar um cursor, feche o cursor com o método Close() . Esse método libera os recursos que o cursor consome no aplicação cliente e no servidor MongoDB .

defer cursor.Close(context.TODO())

Observação

Feche o cursor ao recuperar documentos individualmente, pois esses métodos tornam o cursor ajustável.

Para saber mais sobre as operações abordadas neste guia, consulte os seguintes guias:

Para saber mais sobre cursores e como acessar seus elementos, consulte a seguinte documentação da API:

←  Retrieve DataRetrieve Distinct Values →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.