Especificar uma query
Nesta página
Visão geral
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;
Valores literais
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.
Operadores de comparação
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 query 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.
Operadores lógicos
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.
Operadores de array
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.
Operadores de elementos
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.
Operadores de avaliação
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.
Informações adicionais
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.