Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Acessar dados de um cursor

Neste guia, você pode aprender como acessar dados de um cursor usando o Driver .NET/C#.

Um cursor é uma ferramenta que retorna os resultados de uma operação de leitura em lotes iteráveis. Como um cursor contém apenas um subconjunto de documentos a qualquer momento, os cursores reduzem o consumo de memória e o uso da largura de banda da rede.

Você pode recuperar um cursor utilizando o método FindSync() ou FindAsync(). Você também pode converter os resultados do método Find() em um cursor encadeando o método ToCursor() ou ToCursorAsync().

Os exemplos neste guia utilizam a coleção do restaurants no banco de dados do sample_restaurants fornecido no conjunto de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de exemplo, consulte o tutorial Introdução ao driver .NET/C#.

Os exemplos nesta página utilizam o seguinte objeto Restaurant para modelar os documentos na coleção restaurants:

[BsonIgnoreExtraElements]public class Restaurant{ public ObjectId Id { get; set; } [BsonElement("name")] public string Name { get; set; }}

Para iterar sobre o conteúdo de um cursor, use um loop foreach dentro de um bloco using. O exemplo a seguir recupera documentos da coleção restaurants nos quais o valor do campo name é "Starbucks" e, em seguida, itera sobre os resultados. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Starbucks"); using (var cursor = collection.FindSync(filter)){ while (cursor.MoveNext()) { foreach (var restaurant in cursor.Current) { Console.WriteLine(restaurant.Name); } }}

O exemplo a seguir executa a mesma operação, mas usa o método ToCursor(). Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Starbucks"); using (var cursor = collection.Find(filter).ToCursor()){ while (cursor.MoveNext()) { foreach (var restaurant in cursor.Current) { Console.WriteLine(restaurant.Name); } }}

Aviso

Se o número e o tamanho dos documentos retornados pela sua query excederem a memória disponível do aplicação , seu programa poderá falhar. Se você espera um conjunto de resultados grande, acesse o cursor iterativamente.

Para recuperar todos os documentos de um cursor, use o método ToList(), como mostrado no exemplo a seguir. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Dunkin' Donuts");var results = collection.FindSync(filter).ToList();

Ao fazer query em uma collection limitada, você pode usar um cursor persistente que permanece aberto depois que o cliente esgota os resultados em um cursor. Para criar um cursor persistente, crie um objeto FindOptions e defina a propriedade CursorType como CursorType.TailableAwait. Em seguida, passe o objeto FindOptions para um dos métodos de operação de localização. O exemplo a seguir mostra como criar um cursor persistente em uma collection limitada. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Dunkin' Donuts");var options = new FindOptions<Restaurant>{ CursorType = CursorType.TailableAwait}; using (var cursor = collection.FindSync(filter, options)){ while (cursor.MoveNext()) { foreach (var restaurant in cursor.Current) { Console.WriteLine(restaurant.Name); } }}

Para saber mais sobre os métodos e classes utilizados neste guia, consulte a seguinte documentação da API: