Overview
En esta guía, aprenderá a usar el controlador MongoDB.NET/C# para crear un filtro de consulta. Un filtro de consulta es una expresión que especifica los documentos que se leerán, actualizarán o eliminarán en una operación CRUD. Puede usar métodos de compilación, disponibles en
Builders<TDocument>.Filter propiedad estática, para crear filtros de consulta y agregarles operaciones.
Nota
Sobrecargas de métodos
Muchos de los métodos de esta página tienen múltiples sobrecargas. Los ejemplos de esta guía muestran solo una definición de cada método. Para obtener más información sobre las sobrecargas disponibles, consulte Documentación de la API.
Datos de muestra
Los ejemplos de esta guía usan los siguientes documentos en una colección llamada 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 }
La siguiente clase Guitar modela los documentos en esta colección:
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 ejecutar los ejemplos de código en esta página, debes obtener una referencia a la colección guitars, como se muestra en el siguiente ejemplo:
var client = new MongoClient("localhost://27017"); var guitarCollection = client.GetDatabase("example").GetCollection<Guitar>("guitars");
Nota
Los documentos de la colección guitars utilizan la convención de nomenclatura camel case. En los ejemplos de esta guía, se utiliza un ConventionPack para deserializar los campos de la colección en notación Pascal y asignarlos a las propiedades de la clase Guitar.
Para aprender más sobre la creación y serialización de clases personalizadas, se pueden consultar las siguientes páginas:
Encuentre todos los documentos
Un filtro de query vacío coincide con todos los documentos de una colección. El siguiente ejemplo muestra cómo crear un filtro de query vacío:
var filter = Builders<Guitar>.Filter.Empty;
Operadores de comparación
Los operadores de comparación comparan el valor del query con el valor de un campo especificado. Algunos de estos métodos tienen una sintaxis alternativa que se puede usar en lugar del método, como se muestra en el siguiente ejemplo:
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();;
La siguiente tabla enumera los métodos del driver .NET/C# para las operaciones de comparación y los operadores equivalentes del MongoDB Server:
Método del controlador .NET/C# | Sintaxis alternativa | Descripción | Operador de MongoDB Server |
|---|---|---|---|
|
| Selecciona los documentos donde el valor del campo especificado sea igual al valor del query. | |
|
| Selecciona los documentos donde el valor del campo especificado sea mayor que el valor del query. | |
|
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea mayor o igual al valor del query. | |
| N/A | Selecciona los documentos donde algún elemento del campo de arreglo especificado coincida con algún valor del arreglo del query. | |
|
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor que el valor del query. | |
|
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor o igual al valor del query. | |
|
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea distinto del valor del query. | |
| N/A | Selecciona los documentos donde se cumpla alguna de las siguientes condiciones:
| |
| N/A | Selecciona los documentos donde el valor de la string del campo especificado coincida con algún valor de la string del arreglo del query. | |
| N/A | Selecciona documentos donde el valor de la string del campo especificado no coincide con ninguno de los valores del string en el arreglo de query. |
El siguiente ejemplo llama al método Find() y pasa un filtro lambda, que el driver traduce en un filtro de query. El query coincide con todos los documentos en los que el campo establishedYear es mayor 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 }
En el siguiente ejemplo, se utilizan desarrolladores para crear un filtro de query que coincida con los mismos documentos que el ejemplo 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 }
El siguiente ejemplo llama al método Find() y pasa una expresión lambda, que el driver traduce a un filtro de query. El query coincide con todos los documentos donde el campo makees igual a "Fender".
// 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 }
En el siguiente ejemplo, se utilizan desarrolladores para crear un filtro de query que coincida con los mismos documentos que el ejemplo 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
Los operadores lógicos combinan dos o más expresiones y devuelven resultados basados en los resultados de esas expresiones. Estos métodos tienen una sintaxis alternativa que puedes usar en lugar del método, como se muestra en el siguiente ejemplo:
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();
En la siguiente tabla se enumeran los métodos del driver .NET/C# para operaciones lógicas y los operadores de MongoDB Server equivalentes:
Método del controlador .NET/C# | Sintaxis alternativa | Descripción | Operador de MongoDB Server |
|---|---|---|---|
|
| Selecciona los documentos donde todas las expresiones se evalúan como verdaderas. | |
|
| Selecciona los documentos donde una o más expresiones se evalúan como verdaderas. |
El siguiente ejemplo llama al método Find() y pasa una expresión lambda, que el driver traduce a un filtro de query. El query coincide con todos los documentos en los que el campo establishedYear es mayor o igual a 1985 y el campo make no es 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 }
En el siguiente ejemplo, se utilizan desarrolladores para crear un filtro de query que coincida con los mismos documentos que el ejemplo 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 arreglos
Los operadores de arreglo seleccionan documentos según el valor o la cantidad de elementos en un campo de arreglo. La siguiente tabla enumera los métodos del Driver .NET/C# para operaciones de arreglo y los operadores equivalentes de MongoDB Server:
Método del controlador .NET/C# | Descripción | Operador de MongoDB Server |
|---|---|---|
| Selecciona los documentos donde los valores del campo de arreglo especificado coinciden con todos los valores del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado coincida con el valor del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea mayor que el valor del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea mayor o igual al valor del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado coincida con algún valor del arreglo del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor que el valor del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor o igual al valor del query. | |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado sea distinto del valor del query. | |
| Selecciona los documentos donde se cumpla alguna de las siguientes condiciones:
| |
| Selecciona los documentos donde algún elemento de la string del campo de arreglo especificado coincida con algún valor de la string del arreglo del query. | |
| Selecciona los documentos donde se cumpla alguna de las siguientes condiciones:
| |
| Selecciona los documentos donde algún elemento del campo de arreglo especificado cumpla con los criterios del query. | |
| Selecciona los documentos donde el campo de arreglo especificado tenga el tamaño indicado. | |
| Selecciona los documentos donde el campo de arreglo especificado sea mayor que el tamaño indicado. | |
| Selecciona los documentos donde el campo de arreglo especificado sea mayor o igual al tamaño indicado. | |
| Selecciona los documentos donde el campo de arreglo especificado sea menor que el tamaño indicado. | |
| Selecciona los documentos donde el campo de arreglo especificado sea menor o igual al tamaño indicado. |
El siguiente ejemplo utiliza desarrolladores para crear un filtro de query que seleccione todos los documentos que tengan exactamente tres elementos en el 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
Los operadores de elemento seleccionan documentos del query según la presencia o el tipo de un campo. La siguiente tabla enumera los métodos del Driver .NET/C# para operaciones de elemento y los operadores equivalentes de MongoDB Server:
Método del controlador .NET/C# | Descripción | Operador de MongoDB Server |
|---|---|---|
| Selecciona los documentos que contienen o no contienen un campo especificado, incluidos los documentos donde el valor del campo es | |
| Selecciona los documentos donde el valor del campo especificado sea una instancia de los BSON types indicados. |
En el siguiente ejemplo, se utilizan desarrolladores para crear un filtro de query que coincida con todos los documentos que tengan un 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 evaluación
Los operadores de evaluación analizan los datos de campos individuales o de todos los documentos de la colección. La siguiente tabla enumera los métodos del driver .NET/C# para las operaciones de evaluación y los operadores equivalentes de MongoDB Server:
Método del controlador .NET/C# | Descripción | Operador de MongoDB Server |
|---|---|---|
| Selecciona los documentos que cumplen con el JSON schema especificado. | |
| Selecciona los documentos donde el valor del campo especificado, al dividirse entre un divisor, tenga el resto indicado (módulo). | |
| Selecciona los documentos en los que el valor del campo especificado coincide con una expresión regular determinada. | |
| Se utiliza para pasar al sistema de query ya sea una string que contenga una expresión de JavaScript o una función completa de JavaScript. |
En el siguiente ejemplo, se utilizan desarrolladores para crear un filtro de query que coincida con todos los documentos que tengan un valor en el campo make que comience con la 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 geoespaciales
Los operadores geoespaciales devuelven datos en función de las condiciones de expresión geoespacial. En la siguiente tabla se enumeran los métodos del driver .NET/C# para operaciones geoespaciales y los operadores de MongoDB Server equivalentes:
Método del controlador .NET/C# | Descripción | Operador de MongoDB Server |
|---|---|---|
| Devuelve los documentos cuyos datos geoespaciales se intersectan con un GeoJsonObject. especificado. | |
| Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro de la forma especificada. | |
| Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro del cuadro especificado. | |
| Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro del círculo especificado. | |
| Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro de la esfera especificada. | |
| Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro del polígono especificado. | |
| Especifica un punto para el que una query geoespacial devuelve los documentos de más cercano a más lejano. | |
| Especifica un punto para el que una query geoespacial devuelve los documentos desde el más cercano al más lejano en geometría esférica. |
Operadores a nivel de bits
Los operadores a nivel de bits seleccionan documentos según condiciones de posición de bits. La siguiente tabla enumera los métodos del Driver .NET/C# para operaciones a nivel de bits y los operadores equivalentes de MongoDB Server:
Método del controlador .NET/C# | Descripción | Operador de MongoDB Server |
|---|---|---|
| Selecciona los documentos donde todas las posiciones de bits especificadas están claras ( | |
| Selecciona los documentos donde todas las posiciones de bits especificadas están establecidas ( | |
| Selecciona los documentos en los que alguna de las posiciones de bits especificadas está clara ( | |
| Selecciona los documentos en los que se establece cualquiera de las posiciones de bit especificadas ( |
Otros operadores
El driver.NET/C# también proporciona los siguientes métodos que crean definiciones de filtros:
Método del controlador .NET/C# | Descripción |
|---|---|
| Selecciona los documentos de un tipo derivado del tipo especificado. Se pueden utilizar las sobrecargas de este método para especificar criterios del query adicionales. |
| Busca documentos con un campo que contiene la string especificada. |
Información Adicional
Para obtener más información sobre cualquiera de los métodos de drivers en esta página, se puede consultar la documentación de la API para la clase FilterDefinitionBuilder<TDocument>.