Visão geral
Neste guia, você pode aprender como usar o Driver MongoDB .NET/C# para recuperar dados de uma coleção MongoDB usando operações de leitura. Você pode chamar o método Find() para recuperar documentos que correspondam a um conjunto de critérios.
Dica
Laboratório interativo
Esta página inclui um breve laboratório interativo que demonstra como recuperar dados usando o método Find(). Você pode concluir este laboratório diretamente na janela do seu navegador sem instalar o MongoDB nem um editor de código.
Para iniciar o laboratório, clique no botão Open Interactive Tutorial na parte superior da página. Para expandir o laboratório para um formato de tela inteira, clique no botão de tela inteira (⛶) no canto superior direito do painel do laboratório.
Dados de amostra
Os exemplos neste guia usam a collection sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte a Introdução ao driver .NET/C#.
Os exemplos desta página utilizam as seguintes classes Restaurant, Address e GradeEntry como modelos:
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [] public double[] Coordinates { get; set; } public string Street { get; set; } [] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
Observação
Os documentos na collection restaurants usam a convenção de nomenclatura snake-case. Os exemplos neste guia usam um ConventionPack para desserializar os campos na coleção em maiúsculas e minúsculas Pascal e mapeá-los para as propriedades na classe Restaurant .
Para saber mais sobre serialização personalizada, consulte Serialização personalizada.
Encontrar documentos
Use o método Find() para recuperar documentos de uma coleção. O método Find() utiliza um filtro de queries e retorna todos os documentos correspondentes. Um filtro de queries é um objeto que especifica os documentos que você deseja recuperar em sua query.
Para saber mais sobre filtros de query, consulte Criar um filtro de query.
Encontrar um documento
Para localizar um único documento em uma coleção, passe um filtro de queries que especifique os critérios do documento que você deseja localizar e, em seguida, encadeie o método FirstOrDefault() ou FirstOrDefaultAsync(). Se mais de um documento corresponder ao filtro de queries, esses métodos retornarão o primeiro documento correspondente dos resultados recuperados. Se nenhum documento corresponder ao filtro de queries, os métodos retornarão null.
var restaurants = _restaurantsCollection.Find(filter).FirstOrDefault();
var restaurants = await _restaurantsCollection.Find(filter).FirstOrDefaultAsync();
Dica
Primeiro documento
O método FirstOrDefault() retorna o primeiro documento em ordem natural no disco se nenhum critério de classificação for especificado.
Para ver um exemplo completo de como usar o método Find() para localizar um único documento, consulte Outras informações.
Localizar vários documentos
Para encontrar vários documentos em uma coleção, passe um filtro de queries para o método Find() que especifica os critérios dos documentos que você deseja recuperar.
Você pode utilizar um cursor para iterar nos documentos retornados pelo método Find(). Um cursor é um mecanismo que permite que um aplicativo itere sobre os resultados do banco de dados enquanto mantém apenas um subconjunto deles na memória em determinado momento. Os cursores são úteis quando o método Find() retorna uma grande quantidade de documentos.
Para usar um cursor para iterar sobre os documentos, passe um filtro de queries para o método Find() que especifica os critérios dos documentos que você deseja localizar e, em seguida, encadeie o método ToCursor() ou ToCursorAsync() . Para visualizar um exemplo síncrono ou assíncrono, selecione a guia correspondente.
var restaurants = _restaurantsCollection.Find(filter).ToCursor();
var restaurants = await _restaurantsCollection.Find(filter).ToCursorAsync();
Se você for retornar um pequeno número de documentos ou precisar que seus resultados sejam retornados como um objeto List, use os métodos ToList() ou ToListAsync().
Para encontrar vários documentos em uma coleção e mantê-los na memória como uma lista, passe um filtro de queries para o método Find() que especifique os critérios dos documentos que deseja encontrar e, em seguida, encadeie o método ToList() ou ToListAsync(). Para visualizar um exemplo síncrono ou assíncrono, selecione a guia correspondente.
var restaurants = _restaurantsCollection.Find(filter).ToList();
var restaurants = await _restaurantsCollection.Find(filter).ToListAsync();
Para ver um exemplo completo de como usar o método Find() para encontrar vários documentos, consulte Informações adicionais.
Observação
Localizar todos os documentos
Para encontrar todos os documentos em uma coleção, passe um filtro vazio para o método Find().
var filter = Builders<Restaurant>.Filter.Empty; var allRestaurants = _restaurantsCollection.Find(filter);
Para ver um exemplo totalmente executável do uso do método Find() para localizar todos os documentos, consulte Informações adicionais.
Modificar comportamento de localização
Você pode modificar o comportamento do método Find() passando um objeto FindOptions.
Você pode configurar as opções comumente usadas com os seguintes métodos:
Método | Descrição |
|---|---|
| Obtém ou define o número máximo de documentos dentro de cada lote retornado em um resultado de query. Se |
| Define as opções de agrupamento. Consulte a seção Agrupamento desta página para obter mais informações. |
| Define o comentário para a query para facilitar a visualização nos registros do profiler . |
| Define a dica de qual índice usar. |
| Define o tempo de execução máximo no servidor para esta operação. |
Para ver uma lista completa de opções disponíveis, consulte Propriedades do FindOptions.
Agrupamentos
Para configurar o agrupamento para sua operação, crie uma instância da classe Agrupamento.
A tabela seguinte descreve os parâmetros que o construtor do Collation aceita. Ela também lista a propriedade de classe correspondente que você pode usar para ler o valor de cada configuração.
Parâmetro | Descrição | Propriedade de classe |
|---|---|---|
| Especifica a locale Componentes internacionais para Unicode (ICU). Para obter uma lista de localidades suportadas, consulte Localidades de Agrupamento e Parâmetros Padrão no Manual do MongoDB Server . |
|
| (Opcional) Especifica se incluir comparação de caso. |
|
| (Opcional) Especifica a ordem de classificação das diferenças de caso durante as comparações de nível terciário. |
|
| (Opcional) Especifica o nível de comparação a ser executado, conforme definido na documentação da ICU. |
|
| (Opcional) Especifica se o driver compara strings numéricas como números. |
|
| (Opcional) Especifica se o driver considera o espaço em branco e a pontuação como caracteres básicos para fins de comparação. |
|
| (Opcional) Especifica quais caracteres o driver considera ignoráveis quando o |
|
| (Opcional) Especifica se o driver normaliza o texto conforme necessário. |
|
| (Opcional) Especifica se as strings contendo diacríticos são classificadas da parte de trás da string para a frente. |
|
Para obter mais informações sobre agrupamento, consulte a página Agrupamento no manual do MongoDB Server.
Exemplo
Este exemplo executa as seguintes ações:
Localiza todos os documentos com "Pizza" no campo
cuisineDefine o
BatchSizecomo3Armazena os resultados em um cursor
Imprime os documentos referenciados pelo cursor
var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Pizza"); var findOptions = new FindOptions { BatchSize = 3 }; using (var cursor = _restaurantsCollection.Find(filter, findOptions).ToCursor()) { foreach (var r in cursor.ToEnumerable()) { WriteLine(r.Name); } }
Pizza Town Victoria Pizza ...
Dica
Limpeza
Crie um cursor com uma instrução usando para invocar automaticamente o método Dispose () quando o cursor não está mais em uso.
Informações adicionais
Para saber mais sobre filtros de query, consulte Criar um filtro de query.
Para saber como especificar queries usando LINQ, consulte Sintaxe LINQ para operações de agregação.
Para obter exemplos executáveis das operações de localização, consulte os seguintes exemplos de uso:
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: