Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/

Especificar uma query

Nesta página

  • Visão geral
  • Valores literais
  • Operadores de comparação
  • Operadores lógicos
  • Operadores de array
  • Operadores de elementos
  • Operadores de avaliação
  • Informações adicionais

Neste guia, você pode aprender como especificar uma query usando o Driver MongoDB .NET/C#.

Você pode restringir o conjunto de documentos correspondentes gerados por sua consulta criando um filtro de query. Um filtro de query é uma expressão que especifica os documentos que você deseja corresponder em uma operação de leitura, atualização ou exclusão.

Observação

Usando LINQ

Este guia mostra como especificar queries usando filtros de query. Você também pode especificar queries usando LINQ. Para saber mais sobre como usar o LINQ, consulte LINQ.

Os exemplos deste guia usam os seguintes documentos em uma collection chamada guitars:

{ "_id": 1, "make": "Fender", "models": ["Stratocaster", "Telecaster"], "establishedYear": 1946, "rating": 9 }
{ "_id": 2, "make": "Gibson", "models": ["Les Paul", "SG", "Explorer"], "establishedYear": 1902, "rating": 8 }
{ "_id": 3, "make": "PRS", "models": ["Silver Sky", "SE", "Custom"], "establishedYear": 1985, "rating": 9 }
{ "_id": 4, "make": "Kiesel", "models": ["Ares", "Vader", "Solo"], "establishedYear": 2015 }
{ "_id": 5, "make": "Ibanez", "models": ["RG", "AZ"], "establishedYear": 1957, "rating": 7 }
{ "_id": 6, "make": "Strandberg", "models": ["Boden", "Salen"], "establishedYear": 1982 }

A seguinte classe Guitar modela os documentos nesta collection.

public class Guitar
{
public int Id { get; set; }
public string Make { get; set; }
public List<string> Models { get; set; }
public int EstablishedYear { get; set; }
public int? Rating { get; set; }
}

Observação

Os documentos na coleção guitars usam a convenção de nomenclatura de camelo. 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 Guitar .

Para saber mais sobre serialização personalizada, consulte Serialização personalizada.

Para saber mais sobre mapeamento de classes, consulte Mapeamento de Classes.

O seguinte código instancia o objeto _guitarsCollection utilizando a classe Guitar como um parâmetro de tipo. Esse parâmetro de tipo faz com que o driver serialize e deserialize automaticamente os documentos que envia e recebe do MongoDB para instâncias da classe Guitar:

private static IMongoCollection<Guitar> _guitarsCollection;

Consultas de valor literal retornam documentos com uma correspondência exata ao seu filtro de consulta.

O exemplo seguinte especifica um filtro de consulta como um parâmetro para o método Find(). A consulta corresponde a todos os documentos onde o campo make é igual a "Fornecedor".

var results = _guitarsCollection.Find(g => g.Make == "Fender").ToList();
foreach (var doc in results)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }

O exemplo a seguir usa construtores para criar um filtro de consulta que corresponda aos mesmos documentos do exemplo anterior:

var filter = Builders<Guitar>.Filter.Eq(g => g.Make, "Fender");
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }

Dica

Localizar todos os documentos

Use um filtro de consulta vazio para corresponder a todos os documentos na coleção. Crie um filtro de consulta vazio com construtores da seguinte maneira:

var result = _guitarsCollection.Find(Builders<Guitar>.Filter.Empty).ToList();

Para saber mais sobre como usar construtores, consulte Operações com construtores.

Os operadores de comparação analisam o valor em um documento em relação ao valor especificado em seu filtro de query. Os operadores de comparação comuns incluem:

Operador
Construtor
Descrição
>
Gt()
Maior que
<=
Lte()
Menor ou igual a
!=
Ne()
Não é igual a

Para uma lista completa de operadores de comparação, consulte a página Operadores de Consulta de Comparação.

O exemplo seguinte especifica um filtro de consulta como um parâmetro para o método Find(). A consulta corresponde a todos os documentos onde o campo establishedYear é maior que 1985.

var results = _guitarsCollection.Find(g => g.EstablishedYear > 1985).ToList();
foreach (var doc in results)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }

O exemplo a seguir usa construtores para criar um filtro de consulta que corresponda aos mesmos documentos do exemplo anterior:

var filter = Builders<Guitar>.Filter.Gt(g => g.EstablishedYear, 1985);
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }

Para saber mais sobre como usar construtores, consulte Operações com construtores.

Os operadores lógicos correspondem aos documentos usando lógica aplicada aos resultados de dois ou mais conjuntos de expressões. Veja a seguir uma lista de alguns operadores lógicos:

Operador
Construtor
Descrição
&&
And()
Todas as expressões devem avaliar para verdadeiro.
||
Or()
Pelo menos uma expressão deve ser avaliada como verdadeira.

Para uma lista completa dos operadores lógicos, consulte a página Operadores lógicos de query .

O exemplo seguinte especifica um filtro de consulta como um parâmetro para o método Find(). A consulta corresponde a todos os documentos onde o campo establishedYear é maior ou igual a 1985, e o campo make não é igual a "Kiesel".

var results = _guitarsCollection.Find(g => g.EstablishedYear >= 1985 && r.Make != "Kiesel").ToList();
foreach (var doc in results)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }

O exemplo a seguir usa construtores para criar um filtro de consulta que corresponda aos mesmos documentos do exemplo anterior:

var builder = Builders<Guitar>.Filter;
var filter = builder.And(builder.Gte(g => g.EstablishedYear, 1985), builder.Ne(r => r.Make, "Kiesel"));
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }

Para saber mais sobre como usar construtores, consulte Operações com construtores.

Os operadores de array correspondem aos documentos com base no valor ou na quantidade de elementos em um campo de array. A seguir está uma lista de métodos construtores que usam operadores de array:

Operador
Descrição
All()
Corresponde aos documentos se o campo de matriz contiver todos os elementos especificados na consulta.
Any()
Corresponde aos documentos se algum elemento no campo de matriz corresponder ao filtro de consulta especificado.
Size()
Corresponde aos documentos se o campo de matriz for um tamanho especificado.

Observação

O construtor Any() utiliza o operador de consulta $elemMatch.

Para saber mais sobre o seletor de consulta $elemMatch, consulte $elemMatch.

Para obter mais informações sobre os operadores de matriz, consulte a página Operadores de Consulta de Matriz .

O exemplo a seguir usa construtores para criar um filtro de consulta que corresponda a todos os documentos que tenham 3 elementos no campo models:

var filter = Builders<Guitar>.Filter.Size(g => g.Models, 3);
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }

Para saber mais sobre como usar construtores, consulte Operações com construtores.

Os operadores de elemento consultam os dados com base na presença ou tipo de campo.

Para uma lista completa dos operadores de elementos, consulte a página Operadores de query de elementos .

O exemplo seguinte utiliza construtores para criar um filtro de consulta que corresponde a todos os documentos que têm um campo rating:

var filter = Builders<Guitar>.Filter.Exists(g => g.Rating);
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
{ "_id" : 5, "make" : "Ibanez", "models" : ["RG", "AZ"], "establishedYear" : 1957, "rating" : 7 }

Para saber mais sobre como usar construtores, consulte Operações com construtores.

Os operadores de avaliação analisam dados em campos individuais ou em documentos de toda a coleção. Alguns métodos de construtor que usam operadores de avaliação incluem Regex() e Text().

Para uma lista completa dos operadores de avaliação, consulte a página Operadores de query de avaliação .

O exemplo a seguir usa construtores para criar um filtro de consulta que corresponda a todos os documentos que têm um valor no campo make que começa com a letra "G":

var filter = Builders<Guitar>.Filter.Regex(g => g.Make, "^G");
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }

Para saber mais sobre como usar construtores, consulte Operações com construtores.

Para obter mais informações sobre os operadores mencionados nesta aba, consulte as seguintes entradas manuais do servidor:

Para saber mais sobre como usar Construtores, consulte Operações com Construtores.

Para saber como especificar queries usando LINQ, consulte LINQ.

Voltar

Operações de JSON

Próximo

Serialização