Overview
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 queries utilizando filtros de query. También puedes especificar consultas usando LINQ. Para obtener más información acerca de cómo utilizar LINQ, consulte Sintaxis LINQ para operaciones de agregación.
Los ejemplos en esta guía utilizan 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 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 un 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 desde MongoDB a instancias de la clase Guitar:
private static IMongoCollection<Guitar> _guitarsCollection;
Valores literales
Las queries de valores literales devuelven documentos que coinciden exactamente con su filtro de query.
El siguiente ejemplo especifica un filtro de query como un parámetro para el método Find(). La query coincide con todos los documentos donde el campo make es igual a "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
Utiliza un filtro de query vacío para hacer coincidir todos los documentos de la colección. Crea un filtro de query vacío con desarrolladores de la siguiente manera:
var result = _guitarsCollection.Find(Builders<Guitar>.Filter.Empty).ToList();
Para obtener más información sobre el uso de constructores, consulte Operaciones con constructores.
Operadores de comparación
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 | desarrolladores | Descripción |
|---|---|---|
|
| Mayor que |
|
| Menor o igual a |
|
| No igual a |
Para ver una lista completa de los operadores de comparación, consulte el Página deoperadores de consulta de comparación.
El siguiente ejemplo especifica un filtro de query como un parámetro para el método Find(). La query coincide con todos los documentos donde el campo establishedYear es más grande 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.
Operadores lógicos
Los operadores lógicos emparejan documentos utilizando 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 | desarrolladores | Descripción |
|---|---|---|
|
| Todas las expresiones deben evaluarse como true. |
|
| 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 query como un parámetro para el método Find(). La **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 = _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.
Operadores de arreglos
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 |
|---|---|
| Coincide con documentos si el campo de arreglo contiene todos los elementos especificados en la query. |
| Hace coincidir documentos si cualquier elemento del campo de arreglo coincide con el filtro de query especificado. |
| Hace coincidir documentos si el campo del arreglo tiene un tamaño especificado. |
Nota
El constructor Any() utiliza el operador del query $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 arreglos, consulta la página de Operadores de consulta de arreglos.
El siguiente ejemplo utiliza constructores para crear un filtro de consulta que coincida con todos los documentos que tengan 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.
Operadores de elementos
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.
Operadores de evaluación
Los operadores de evaluación analizan datos en campos individuales o en los documentos de toda la colección. Algunos métodos de construcción que utilizan operadores de evaluación incluyen 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.
Información Adicional
Para obtener más información sobre los operadores mencionados en esta guía, consulta las siguientes entradas del manual del servidor:
Para obtener más información sobre desarrolladores, consulta Operaciones con desarrolladores.
Para aprender a especificar las query usando LINQ, mira la sintaxis de LINQ para operaciones de agregación.