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.
Menu Docs

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);
}
}
}
var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Starbucks");
using (var cursor = await collection.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
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);
}
}
}
var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Starbucks");
using (var cursor = await collection.Find(filter).ToCursorAsync())
{
while (await cursor.MoveNextAsync())
{
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();
var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Dunkin' Donuts");
var results = (await collection.FindAsync(filter)).ToList();

When querying on a capped collection, you can use a tailable cursor that remains open after the client exhausts the results in a cursor. To create a tailable cursor, create a FindOptions object and set the CursorType property to CursorType.TailableAwait. Then, pass the FindOptions object to one of the find operation methods. The following example shows how to create a tailable cursor on a capped collection. Select the Synchronous or Asynchronous tab to see the corresponding code:

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);
}
}
}
var filter = Builders<Restaurant>.Filter.Eq(r => r.Name, "Dunkin' Donuts");
var options = new FindOptions<Restaurant>
{
CursorType = CursorType.TailableAwait
};
using (var cursor = await collection.FindAsync(filter, options))
{
while (await 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: