Docs Menu
Docs Home
/ /

Crear un filtro de query

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.

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:

  • POCOs

  • Mapeo de clases

  • Serialización

  • Objetos polimórficos

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;

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

Eq()

==

Selecciona los documentos donde el valor del campo especificado sea igual al valor del query.

Gt()

>

Selecciona los documentos donde el valor del campo especificado sea mayor que el valor del query.

Gte()

>=

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea mayor o igual al valor del query.

In()

N/A

Selecciona los documentos donde algún elemento del campo de arreglo especificado coincida con algún valor del arreglo del query.

Lt()

<

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor que el valor del query.

Lte()

<=

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor o igual al valor del query.

Ne()

!=

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea distinto del valor del query.

Nin()

N/A

Selecciona los documentos donde se cumpla alguna de las siguientes condiciones:

  • Ninguno de los elementos del campo de arreglo especificado coincide con algún valor del arreglo del query.

  • El campo especificado no existe.

StringIn()

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.

StringNin()

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 }

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

And()

&&

Selecciona los documentos donde todas las expresiones se evalúan como verdaderas.

Or()

||

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 }

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

All()

Selecciona los documentos donde los valores del campo de arreglo especificado coinciden con todos los valores del query.

AnyEq()

Selecciona los documentos donde algún elemento del campo de arreglo especificado coincida con el valor del query.

AnyGt()

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea mayor que el valor del query.

AnyGte()

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea mayor o igual al valor del query.

AnyIn()

Selecciona los documentos donde algún elemento del campo de arreglo especificado coincida con algún valor del arreglo del query.

AnyLt()

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor que el valor del query.

AnyLte()

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea menor o igual al valor del query.

AnyNe()

Selecciona los documentos donde algún elemento del campo de arreglo especificado sea distinto del valor del query.

AnyNin()

Selecciona los documentos donde se cumpla alguna de las siguientes condiciones:

  • Cualquier elemento en el campo de arreglo especificado no está en el arreglo del query.

  • El campo especificado no existe.

AnyStringIn()

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.

AnyStringNin()

Selecciona los documentos donde se cumpla alguna de las siguientes condiciones:

  • Ningún elemento de la string del campo de arreglo especificado se encuentra en el arreglo del query.

  • El campo especificado no existe.

ElemMatch()

Selecciona los documentos donde algún elemento del campo de arreglo especificado cumpla con los criterios del query.

Size()

Selecciona los documentos donde el campo de arreglo especificado tenga el tamaño indicado.

SizeGt()

Selecciona los documentos donde el campo de arreglo especificado sea mayor que el tamaño indicado.

SizeGte()

Selecciona los documentos donde el campo de arreglo especificado sea mayor o igual al tamaño indicado.

SizeLt()

Selecciona los documentos donde el campo de arreglo especificado sea menor que el tamaño indicado.

SizeLte()

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 }

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

Exists()

Selecciona los documentos que contienen o no contienen un campo especificado, incluidos los documentos donde el valor del campo es null.

Type()

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 }

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

JsonSchema()

Selecciona los documentos que cumplen con el JSON schema especificado.

Mod()

Selecciona los documentos donde el valor del campo especificado, al dividirse entre un divisor, tenga el resto indicado (módulo).

RegEx()

Selecciona los documentos en los que el valor del campo especificado coincide con una expresión regular determinada.

Where()

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 }

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

GeoIntersects()

Devuelve los documentos cuyos datos geoespaciales se intersectan con un GeoJsonObject. especificado.

GeoWithin()

Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro de la forma especificada.

GeoWithinBox()

Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro del cuadro especificado.

GeoWithinCenter()

Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro del círculo especificado.

GeoWithinCenterSphere()

Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro de la esfera especificada.

GeoWithinPolygon()

Selecciona los documentos cuyos datos geoespaciales se encuentran completamente dentro del polígono especificado.

Near()

Especifica un punto para el que una query geoespacial devuelve los documentos de más cercano a más lejano.

NearSphere()

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.

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

BitsAllClear()

Selecciona los documentos donde todas las posiciones de bits especificadas están claras (0) en el campo especificado.

BitsAllSet()

Selecciona los documentos donde todas las posiciones de bits especificadas están establecidas (1) en el campo especificado.

BitsAnyClear()

Selecciona los documentos en los que alguna de las posiciones de bits especificadas está clara (0) en el campo especificado.

BitsAnySet()

Selecciona los documentos en los que se establece cualquiera de las posiciones de bit especificadas (1) en el campo especificado.

El driver.NET/C# también proporciona los siguientes métodos que crean definiciones de filtros:

Método del controlador .NET/C#
Descripción

OfType()

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.

Text()

Busca documentos con un campo que contiene la string especificada.

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>.

Volver

Insertar documentos

En esta página