Overview
En esta guía, aprenderá a usar el controlador MongoDB .NET/C# para recuperar datos de una colección MongoDB mediante operaciones de lectura. Puede llamar al
Find() método para recuperar documentos que coinciden con un conjunto de criterios.
Tip
Interactive Lab
Esta página incluye un breve laboratorio interactivo que demuestra cómo recuperar datos usando el método Find(). Se puede completar este laboratorio directamente en la ventana del navegador sin instalar MongoDB o un editor de código.
Para iniciar el laboratorio, haga clic en el Open Interactive Tutorial Botón en la parte superior de la página. Para ampliar el laboratorio a pantalla completa, haga clic en el botón de pantalla completa (⛶) en la esquina superior derecha del panel del laboratorio.
Datos de muestra
Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de Conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Introducción al controlador .NET/C#.
En los ejemplos de esta página se utilizan las siguientes clases Restaurant, Address y GradeEntry como modelos:
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [] public double[] Coordinates { get; set; } public string Street { get; set; } [] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
Nota
Los documentos de la colección restaurants utilizan la convención de nomenclatura snake-case. Los ejemplos de esta guía utilizan un ConventionPack para deserializar los campos de la colección en notación Pascal y asignarlos a las propiedades de la clase Restaurant.
Para aprender más sobre la serialización personalizada, consultar Serialización personalizada.
Buscar documentos
Utiliza el método Find() para recuperar documentos de una colección. El método Find() toma un filtro de query y devuelve todos los documentos que coinciden. Un filtro de query es un objeto que especifica los documentos que deseas recuperar en tu query.
Para aprender más sobre los filtros de query, consulte Crear un filtro de query.
Encuentre un documento
Para buscar un solo documento en una colección, pasa un filtro de query que especifique los criterios del documento que deseas buscar y, a continuación, encadena el método FirstOrDefault() o FirstOrDefaultAsync(). Si más de un documento coincide con el filtro de query, estos métodos devuelven el primer documento coincidente de los resultados recuperados. Si ningún documento coincide con el filtro de query, los métodos devuelven null.
var restaurants = _restaurantsCollection.Find(filter).FirstOrDefault();
var restaurants = await _restaurantsCollection.Find(filter).FirstOrDefaultAsync();
Tip
Primer documento
El método FirstOrDefault() devuelve el primer documento en orden natural en el disco si no se especifica ningún criterio de ordenación.
Para ver un ejemplo completo de cómo usar el método Find() para encontrar un único documento, consulta la Información adicional.
Encuentra varios documentos
Para encontrar varios documentos en una colección, pasar un filtro de query al método Find() que especifique los criterios de los documentos que desea recuperar.
Se puede utilizar un cursor para iterar sobre los documentos devueltos por el método Find(). Un cursor es un mecanismo que permite a una aplicación iterar sobre los resultados de una base de datos mientras mantiene solo un subconjunto de ellos en la memoria en un momento dado. Los cursores son útiles cuando el método Find() devuelve una gran cantidad de documentos.
Si deseas utilizar un cursor para iterar sobre los documentos, pasa un filtro de query al método Find() que especifique los criterios de los documentos que quieras buscar y, a continuación, encadena el método ToCursor() o ToCursorAsync(). Para ver un ejemplo sincrónico o asincrónico, selecciona la pestaña correspondiente.
var restaurants = _restaurantsCollection.Find(filter).ToCursor();
var restaurants = await _restaurantsCollection.Find(filter).ToCursorAsync();
Si devuelves un pequeño número de documentos o necesitas que se devuelvan los resultados como un objeto List, utiliza los métodos ToList() o ToListAsync().
Para encontrar varios documentos en una colección y mantenerlos en la memoria como una lista, pasa un filtro de query al método Find() que especifique los criterios de los documentos que quieras encontrar y, a continuación, encadena el método ToList() o ToListAsync(). Para ver un ejemplo sincrónico o asincrónico, selecciona la pestaña correspondiente.
var restaurants = _restaurantsCollection.Find(filter).ToList();
var restaurants = await _restaurantsCollection.Find(filter).ToListAsync();
Para ver un ejemplo completo de cómo usar el método Find() para encontrar varios documentos, consulta la Información adicional.
Nota
Encuentre todos los documentos
Para encontrar todos los documentos en una colección, pasa un filtro vacío al método Find().
var filter = Builders<Restaurant>.Filter.Empty; var allRestaurants = _restaurantsCollection.Find(filter);
Para ver un ejemplo completamente ejecutable del uso del método Find() para encontrar todos los documentos, consulta Información adicional.
Modificar el comportamiento de búsqueda
Puedes modificar el comportamiento del método Find() pasando un objeto FindOptions.
Puedes configurar las opciones de uso común con los siguientes métodos:
Método | Descripción |
|---|---|
| Gets or sets the maximum number of documents within each
batch returned in a query result. If batchSize is not set, the Find()
method has an initial batch size of 101 documents and a maximum size of 16
mebibytes (MiB) for each subsequent batch. This option can enforce a smaller
limit than 16 MiB, but not a larger one. If you set batchSize to a limit that
results in batches larger than 16 MiB, this option has no effect and the
Find() method uses the default batch size. |
| Sets the collation options. See the
Collation section of this page for more information. |
| Sets the comment to the query to make looking in the profiler logs easier. |
| Sets the hint for which index to use. |
| Sets the maximum execution time on the server for this operation. |
Para ver una lista completa de las opciones disponibles, consulta Propiedades de FindOptions.
Intercalación
Para configurar la intercalación para tu operación, crea una instancia de la clase intercalación.
La siguiente tabla describe los parámetros que acepta el constructor Collation. También enumera la propiedad de clase correspondiente que se puede usar para leer el valor de cada configuración.
Parameter | Descripción | Propiedad de clase |
|---|---|---|
| Specifies the International Components for Unicode (ICU) locale. For a list of
supported locales,
see Collation Locales and Default Parameters
in the MongoDB Server Manual. If you want to use simple binary comparison, use the Collation.Simple static
property to return a Collation object with the locale set to "simple".Data Type: string |
|
| (Optional) Specifies whether to include case comparison. When this argument is true, the driver's behavior depends on the value of
the strength argument:- If strength is CollationStrength.Primary, the driver compares base
characters and case.- If strength is CollationStrength.Secondary, the driver compares base
characters, diacritics, other secondary differences, and case.- If strength is any other value, this argument is ignored.When this argument is false, the driver doesn't include case comparison at
strength level Primary or Secondary.Data Type: booleanDefault: false |
|
| (Optional) Specifies the sort order of case differences during tertiary level comparisons. Data Type: CollationCaseFirst Default: CollationCaseFirst.Off |
|
| (Optional) Specifies the level of comparison to perform, as defined in the
ICU documentation. Data Type: CollationStrength Default: CollationStrength.Tertiary |
|
| (Optional) Specifies whether the driver compares numeric strings as numbers. If this argument is true, the driver compares numeric strings as numbers.
For example, when comparing the strings "10" and "2", the driver treats the values
as 10 and 2, and finds 10 to be greater.If this argument is false or excluded, the driver compares numeric strings
as strings. For example, when comparing the strings "10" and "2", the driver
compares one character at a time. Because "1" is less than "2", the driver finds
"10" to be less than "2".For more information, see Collation Restrictions
in the MongoDB Server manual. Data Type: booleanDefault: false |
|
| (Optional) Specifies whether the driver considers whitespace and punctuation as base
characters for purposes of comparison. Data Type: CollationAlternate Default: CollationAlternate.NonIgnorable (spaces and punctuation are
considered base characters) |
|
| (Optional) Specifies which characters the driver considers ignorable when
the alternate argument is CollationAlternate.Shifted.Data Type: CollationMaxVariable Default: CollationMaxVariable.Punctuation (the driver ignores punctuation
and spaces) |
|
| (Optional) Specifies whether the driver normalizes text as needed. Most text doesn't require normalization. For more information about
normalization, see the ICU documentation. Data Type: booleanDefault: false |
|
| (Optional) Specifies whether strings containing diacritics sort from the back of the string
to the front. Data Type: booleanDefault: false |
|
Más información sobre la intercalación en la página Intercalación en el manual de MongoDB Server.
Ejemplo
Este ejemplo realiza las siguientes acciones:
Busca todos los documentos que contengan “Pizza” en el campo
cuisineEstablece el
BatchSizeen3Almacena los resultados en un cursor
Imprime los documentos a los que hace referencia el cursor
var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Pizza"); var findOptions = new FindOptions { BatchSize = 3 }; using (var cursor = _restaurantsCollection.Find(filter, findOptions).ToCursor()) { foreach (var r in cursor.ToEnumerable()) { WriteLine(r.Name); } }
Pizza Town Victoria Pizza ...
Tip
Optimización
Crea un cursor con una instrucción using para invocar automáticamente el método Dispose() una vez que el cursor ya no esté en uso.
Información Adicional
Para aprender más sobre los filtros de query, consulte Crear un filtro de query.
Para aprender a especificar las query usando LINQ, mira la sintaxis de LINQ para operaciones de agregación.
Para ejemplos ejecutables de las operaciones de búsqueda, consulta los siguientes ejemplos de uso:
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API: