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".
// Finds all documents with a "make" value of "Fender" var results = _guitarsCollection.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 = _guitarsCollection.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 }
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 |
---|---|---|
|
| Maior que |
|
| Menor ou igual a |
|
| 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
.
// Finds all documents with am "establishedYear" value greater than 1985 var results = _guitarsCollection.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 = _guitarsCollection.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 }
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 |
---|---|---|
|
| Todas as expressões devem avaliar para verdadeiro. |
|
| 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".
// Finds all documents with an "establishedYear" value greater than 1985 // and a "make" value that is not equal to "Kiesel" var results = _guitarsCollection.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 = _guitarsCollection.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 }
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 |
---|---|
| Corresponde aos documentos se o campo de matriz contiver todos os elementos especificados na consulta. |
| Corresponde aos documentos se algum elemento no campo de matriz corresponder ao filtro de consulta especificado. |
| 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
:
// 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 = _guitarsCollection.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 }
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
:
// 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 = _guitarsCollection.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 }
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":
// 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 = _guitarsCollection.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 }
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.