Docs Menu
Docs Home
/ /

Especifica un query

En esta guía, puede aprender a especificar una consulta utilizando el controlador MongoDB .NET/C#.

Puede limitar el conjunto de documentos coincidentes que devuelve su consulta creando un filtro de consulta. Un filtro de consulta es una expresión que especifica los documentos que desea buscar en una operación de lectura, actualización o eliminación.

Nota

Usando LINQ

Esta guía muestra cómo especificar consultas mediante filtros de consulta. También puede especificar consultas mediante LINQ. Para obtener más información sobre el uso de LINQ, consulte Sintaxis LINQ para operaciones de agregación.

Los ejemplos de esta guía utilizan los siguientes documentos en una colección denominada 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 de 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; }
}

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 serialización personalizada, consultar Serialización personalizada.

Para obtener más información sobre el mapeo de clases, consulte Mapeo de clases.

El siguiente código instancia el objeto _guitarsCollection utilizando la clase Guitar como parámetro de tipo. Este parámetro de tipo hace que el controlador serialice y deserialice automáticamente los documentos que envía y recibe de MongoDB a instancias de la clase Guitar:

private static IMongoCollection<Guitar> _guitarsCollection;

Las consultas de valor literal devuelven documentos que coinciden exactamente con su filtro de consulta.

El siguiente ejemplo especifica un filtro de consulta como parámetro del método Find(). La consulta busca todos los documentos donde el campo make sea "Fender".

// 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 }

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 = _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 }

Tip

Encuentre todos los documentos

Utilice un filtro de consulta vacío para buscar coincidencias en todos los documentos de la colección. Cree un filtro de consulta vacío con constructores como se indica a continuación:

var result = _guitarsCollection.Find(Builders<Guitar>.Filter.Empty).ToList();

Para obtener más información sobre el uso de constructores, consulte Operaciones con constructores.

Los operadores de comparación analizan el valor de un documento comparándolo con el valor especificado en el filtro de consulta. Entre los operadores de comparación más comunes se incluyen:

Operador
Builder
Descripción

>

Gt()

Mayor que

<=

Lte()

Menor o igual a

!=

Ne()

No es igual a

Para obtener una lista completa de operadores de comparación, consulte la Página deoperadores de consulta de comparación.

El siguiente ejemplo especifica un filtro de consulta como parámetro del método Find(). La consulta busca todos los documentos donde el campo establishedYear sea mayor 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 }

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 = _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 obtener más información sobre el uso de constructores, consulte Operaciones con constructores.

Los operadores lógicos relacionan documentos mediante la lógica aplicada a los resultados de dos o más conjuntos de expresiones. A continuación, se muestra una lista de algunos operadores lógicos:

Operador
Builder
Descripción

&&

And()

Todas las expresiones deben evaluarse como verdaderas.

||

Or()

Al menos una expresión debe evaluarse como verdadera.

Para obtener una lista completa de operadores lógicos, consulte la página Operadores de consulta lógica.

El siguiente ejemplo especifica un filtro de consulta como parámetro del método Find(). La consulta busca todos los documentos donde el campo establishedYear sea mayor o igual que 1985 y el campo make sea distinto de "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 }

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 = _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 obtener más información sobre el uso de constructores, consulte Operaciones con constructores.

Los operadores de matriz buscan coincidencias de documentos según el valor o la cantidad de elementos en un campo de matriz. A continuación, se muestra una lista de métodos de construcción que utilizan operadores de matriz:

Operador
Descripción

All()

Coincide con los documentos si el campo de la matriz contiene todos los elementos especificados en la consulta.

Any()

Hace coincidir documentos si cualquier elemento del campo de arreglo coincide con el filtro de query especificado.

Size()

Coincide con los documentos si el campo de la matriz tiene un tamaño especificado.

Nota

El constructor Any() utiliza el operador de consulta $elemMatch.

Para obtener más información sobre el $elemMatch selector de consultas, consulte $elemMatch.

Para obtener más información sobre los operadores de matriz, consulte la página Operadores de consulta de matriz.

El siguiente ejemplo utiliza constructores para crear un filtro de consulta que coincida con todos los documentos que tienen 3 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 = _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 obtener más información sobre el uso de constructores, consulte Operaciones con constructores.

Los operadores de elementos consultan datos según la presencia o el tipo de un campo.

Para obtener una lista completa de operadores de elementos, consulte la página Operadores de consulta de elementos.

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 = _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 obtener más información sobre el uso de constructores, consulte Operaciones con constructores.

Los operadores de evaluación analizan los datos de campos individuales o de todos los documentos de la colección. Algunos métodos de construcción que utilizan operadores de evaluación son Regex() y Text().

Para obtener una lista completa de los operadores de evaluación, consulte la página Operadores del query de evaluación.

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 = _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 obtener más información sobre el uso de constructores, consulte Operaciones con constructores.

Para obtener más información sobre los operadores mencionados en esta guía, consulte las siguientes entradas del Manual del servidor:

Para obtener más información sobre el uso de Builders, consulte Operaciones con Builders.

Para aprender a especificar las query usando LINQ, mira la sintaxis de LINQ para operaciones de agregación.

Volver

Operaciones BSON

En esta página