Visão geral
Neste guia, você pode aprender como usar o Driver MongoDB .NET/C# para criar um filtro de query. Um filtro de query é uma expressão que especifica os documentos a serem lidos, atualizados ou excluídos em uma operação CRUD. Você pode usar métodos de construtor, disponíveis na propriedade estática Builders<TDocument>.Filter
, para criar filtros de query e adicionar operações a eles.
Observação
Sobrecargas de método
Muitos dos métodos nesta página têm múltiplas sobrecargas. Os exemplos deste guia mostram apenas uma definição de cada método. Para obter mais informações sobre as sobrecargas disponíveis, consulte a documentação da API .
Dados de amostra
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 coleção:
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; } }
Para executar os exemplos de código nesta página, você deve obter uma referência à coleção guitars
, conforme mostrado no exemplo a seguir :
var client = new MongoClient("localhost://27017"); var guitarCollection = client.GetDatabase("example").GetCollection<Guitar>("guitars");
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 como criar e serializar classes personalizadas, consulte as seguintes páginas:
Localizar todos os documentos
Um filtro de query vazio corresponde a todos os documentos em uma collection. O exemplo a seguir mostra como criar um filtro de query vazio:
var filter = Builders<Guitar>.Filter.Empty;
Operadores de comparação
Os operadores de comparação comparam o valor da query com o valor em um campo especificado. Alguns desses métodos têm sintaxe alternativa que você pode usar no lugar do método, como mostrado no exemplo a seguir:
var filter = Builders<Guitar>.Filter.Eq(g => g.Make, "Fender"); var results = guitarCollection.Find(filter).ToList(); // Alternative syntax var results = guitarCollection.Find(g => g.Make == "Fender").ToList();;
A tabela a seguir lista os métodos do driver .NET/C# para operações de comparação e os operadores MongoDB Server equivalentes:
Método de driver .NET/C# | Sintaxe alternativa | Descrição | Operador de MongoDB Server |
---|---|---|---|
|
| Corresponde a documentos onde o valor do campo especificado é igual ao valor da query. | |
|
| Corresponde a documentos onde o valor do campo especificado é maior que o valor da query. | |
|
| Corresponde a documentos em que qualquer elemento no campo de array especificado é maior ou igual ao valor da query. | |
| N/A | Corresponde a documentos em que qualquer elemento no campo de array especificado corresponde a qualquer valor na array de query. | |
|
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado é menor que o valor da consulta. | |
|
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado é menor ou igual ao valor da consulta. | |
|
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado não é igual ao valor de consulta. | |
| N/A | Corresponde a documentos onde uma das seguintes afirmações é verdadeira:
| |
| N/A | Corresponde a documentos onde o valor de string do campo especificado corresponde a qualquer valor de string na array de query. | |
| N/A | Corresponde a documentos onde o valor de string do campo especificado não corresponde a nenhum dos valores de string na array de query. |
O exemplo a seguir chama o método Find()
e passa um filtro Lambda, que o driver converte em um filtro de query. A consulta corresponde a todos os documentos onde o campo establishedYear
é maior que 1985
.
// Finds all documents with an "establishedYear" value greater than 1985 var results = guitarCollection.Find(g => g.EstablishedYear > 1985).ToList(); foreach (var doc in results) { // Prints the documents in bson (json) format 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:
// Creates a filter for all documents with an "establishedYear" value greater // than 1985 var filter = Builders<Guitar>.Filter.Gt(g => g.EstablishedYear, 1985); // Finds all documents that match the filter var result = guitarCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }
O exemplo a seguir chama o método Find()
e passa uma expressão Lambda , que o driver converte em um filtro de query. A consulta corresponde a todos os documentos onde o campo make
é igual a "Fornecedor".
// Finds all documents with a "make" value of "Fender" var results = guitarCollection.Find(g => g.Make == "Fender").ToList(); foreach (var doc in results) { // Prints the documents in bson (json) format 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:
// Creates a filter for all documents with a "make" value of "Fender" var filter = Builders<Guitar>.Filter.Eq(g => g.Make, "Fender"); // Finds all documents that match the filter var result = guitarCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }
Operadores lógicos
Os operadores lógicos combinam duas ou mais expressões e retornam resultados com base nos resultados dessas expressões. Esses métodos têm sintaxe alternativa que você pode usar no lugar do método, como mostrado no exemplo a seguir:
var builder = Builders<Guitar>.Filter; var filter = builder.And( builder.Gte(g => g.EstablishedYear, 1985), builder.Ne(r => r.Make, "Kiesel")); var results = guitarCollection.Find(filter).ToList(); // Alternative syntax var results = guitarCollection.Find( g => g.EstablishedYear >= 1985 && g.Make != "Kiesel") .ToList();
A tabela a seguir lista os métodos do driver .NET/C# para operações lógicas e os operadores MongoDB Server equivalentes:
Método de driver .NET/C# | Sintaxe alternativa | Descrição | Operador de MongoDB Server |
---|---|---|---|
|
| Corresponde a documentos onde todas as expressões avaliam para verdadeiro. | |
|
| Corresponde a documentos onde uma ou mais expressões são avaliadas como verdadeiras. |
O exemplo a seguir chama o método Find()
e passa uma expressão Lambda , que o driver converte em um filtro de query. 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".
// Finds all documents with an "establishedYear" value greater than 1985 // and a "make" value that is not equal to "Kiesel" var results = guitarCollection.Find(g => g.EstablishedYear >= 1985 && r.Make != "Kiesel").ToList(); foreach (var doc in results) { // Prints the documents in bson (json) format 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:
// Creates a filter for all documents with an "establishedYear" value greater // than 1985 and a "make" value that does not equal "Kiesel" var builder = Builders<Guitar>.Filter; var filter = builder.And(builder.Gte(g => g.EstablishedYear, 1985), builder.Ne(r => r.Make, "Kiesel")); // Finds all documents that match the filter var result = guitarCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
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 tabela a seguir lista os métodos do driver .NET/C# para operações de array e os operadores MongoDB Server equivalentes:
Método de driver .NET/C# | Descrição | Operador de MongoDB Server |
---|---|---|
| Corresponde a documentos onde os valores no campo de array especificado correspondem a todos os valores de query. | |
| Corresponde a documentos em que qualquer elemento no campo de array especificado corresponde ao valor da query. | |
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado é maior que o valor de consulta. | |
| Corresponde a documentos em que qualquer elemento no campo de array especificado é maior ou igual ao valor da query. | |
| Corresponde a documentos em que qualquer elemento no campo de array especificado corresponde a qualquer valor na array de query. | |
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado é menor que o valor da consulta. | |
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado é menor ou igual ao valor da consulta. | |
| Corresponde a documentos onde qualquer elemento no campo de matriz especificado não é igual ao valor de consulta. | |
| Corresponde a documentos onde uma das seguintes afirmações é verdadeira:
| |
| Corresponde a documentos em que qualquer elemento de string no campo de array especificado corresponde a qualquer valor de string na array de query. | |
| Corresponde a documentos onde uma das seguintes afirmações é verdadeira:
| |
| Corresponde a documentos em que qualquer elemento no campo de matriz especificado corresponde aos critérios de consulta. | |
| Corresponde a documentos onde o campo de array especificado é o tamanho especificado. | |
| Corresponde a documentos onde o campo de matriz especificado é maior que o tamanho especificado. | |
| Corresponde a documentos onde o campo de array especificado é maior ou igual ao tamanho especificado. | |
| Corresponde a documentos em que o campo de matriz especificado é menor que o tamanho especificado. | |
| Corresponde a documentos onde o campo de array especificado é menor ou igual ao tamanho especificado. |
O exemplo a seguir usa construtores para criar um filtro de consulta que corresponda a todos os documentos que tenham exatamente três elementos no campo models
:
// Creates a filter for all documents with 3 elements in the "models" field var filter = Builders<Guitar>.Filter.Size(g => g.Models, 3); // Finds all documents that match the filter var result = guitarCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format 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 }
Operadores de elementos
Os operadores de elemento correspondem aos dados da query do documento com base na presença ou no tipo de campo. A tabela a seguir lista os métodos do driver .NET/C# para operações de elemento e os operadores MongoDB Server equivalentes:
Método de driver .NET/C# | Descrição | Operador de MongoDB Server |
---|---|---|
| Corresponde a documentos que contêm ou não um campo especificado, incluindo documentos em que o valor de campo é | |
| Corresponde a documentos onde o valor do campo especificado é uma instância dos tipos de BSON especificados. |
O exemplo seguinte utiliza construtores para criar um filtro de consulta que corresponde a todos os documentos que têm um campo rating
:
// Creates a filter for all documents with a populated "ratings" field var filter = Builders<Guitar>.Filter.Exists(g => g.Rating); // Finds all documents that match the filter var result = guitarCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format 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 }
Operadores de avaliação
Os operadores de avaliação analisam dados em campos individuais ou todos os documentos na coleção. A tabela a seguir lista os métodos do driver .NET/C# para operações de avaliação e os operadores equivalentes do MongoDB Server :
Método de driver .NET/C# | Descrição | Operador de MongoDB Server |
---|---|---|
| Corresponde a documentos que satisfazem o JSON schema especificado. | |
| Corresponde a documentos onde o valor do campo especificado dividido por um divisor tem o restante especificado (módulo). | |
| Corresponde a documentos onde o valor do campo especificado corresponde a uma expressão regular especificada . | |
| Use para passar uma string contendo uma expressão JavaScript ou uma função JavaScript completa para o sistema de query. |
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":
// Creates a filter for all documents with a populated "ratings" field var filter = Builders<Guitar>.Filter.Regex(g => g.Make, "^G"); // Finds all documents that match the filter var result = guitarCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }
Operadores geoespaciais
Os operadores geoespaciais retornam dados baseados em condições de expressão geoespacial. A tabela seguinte lista os métodos do Driver .NET/C# para operações geoespaciais e os operadores MongoDB Server equivalentes:
Método de driver .NET/C# | Descrição | Operador de MongoDB Server |
---|---|---|
| Corresponde a documentos cujos dados geoespaciais interseccionam com um GeoJsonObject especificado. | |
| Corresponde a documentos cujos dados geoespaciais estão inteiramente dentro da forma especificada. | |
| Corresponde a documentos cujos dados geoespaciais estão inteiramente dentro da caixa especificada. | |
| Corresponde a documentos cujos dados geoespaciais estão inteiramente dentro do círculo especificado. | |
| Corresponde a documentos cujos dados geoespaciais estão inteiramente dentro da esfera especificada. | |
| Corresponde a documentos cujos dados geoespaciais estão inteiramente dentro do polígono especificado. | |
| Especifica um ponto para o qual uma query geoespacial retorna os documentos do mais próximo para o mais distante. | |
| Especifica um ponto para o qual uma query geoespacial retorna os documentos do mais próximo para o mais distante na geometria esférica. |
Operadores bitwise
Os operadores bit a bit correspondem aos documentos com base nas condições de posição do bit. A tabela a seguir lista os métodos do driver .NET/C# para operações bitwise e os operadores MongoDB Server equivalentes:
Método de driver .NET/C# | Descrição | Operador de MongoDB Server |
---|---|---|
| Corresponde a documentos em que todas as posições de bit especificadas estão limpas ( | |
| Corresponde a documentos onde todas as posições de bit especificadas estão definidas ( | |
| Corresponde a documentos em que qualquer uma das posições de bit especificadas está limpa ( | |
| Corresponde a documentos onde qualquer uma das posições de bit especificadas está definida ( |
Outros operadores
O driver .NET/C# também fornece os seguintes métodos que criam definições de filtro:
Método de driver .NET/C# | Descrição |
---|---|
| Corresponde a documentos de um tipo derivado do tipo especificado. Você pode usar sobrecargas deste método para especificar critérios de query adicionais. |
| Corresponde a documentos com um campo que contém a string especificada. |
Informações adicionais
Para obter mais informações sobre qualquer um dos métodos de driver nesta página, consulte a documentação da API para a classeFilterDefinitionBuilder.<TDocument>