Overview
En esta guía, puedes aprender a usar el controlador Rust para recuperar un recuento preciso y estimado del número de documentos en una colección. El método count_documents() devuelve el número exacto de documentos que coinciden con un filtro de query o que existen en una colección, y el método estimated_document_count() devuelve el número estimado de documentos en una colección.
Datos de muestra
Los ejemplos de esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los conjuntos de datos de ejemplo de Atlas. Para acceder a esta colección desde tu aplicación Rust, crea un Client que se conecte a un clúster de Atlas y asigna los siguientes valores a tu variable my_coll.
Selecciona la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada runtime:
let uri = "<connection string>"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Document> = client .database("sample_restaurants") .collection("restaurants");
let uri = "<connection string>"; let client = Client::with_uri_str(uri)?; let my_coll: Collection<Document> = client .database("sample_restaurants") .collection("restaurants");
Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta la guía Get Started with the Rust Driver.
Los ejemplos en esta guía usan la siguiente estructura Restaurant como modelo para documentos en la colección restaurants:
struct Restaurant { name: String, cuisine: String, }
Recupera un recuento preciso
Utiliza el método count_documents() para contar el número de documentos que hay en una colección. Para contar el número de documentos que coinciden con un criterio de búsqueda específico, pasa un documento de filtro de query al método count_documents().
Para obtener más información sobre cómo especificar una query, consulta la guía Especificar una query.
Contar todos los documentos
Para devolver un recuento de todos los documentos en la colección, pasa un documento de filtro vacío al método count_documents() como se muestra en el siguiente ejemplo. Selecciona la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada entorno de ejecución:
let ct = my_coll.count_documents().await?; println!("Number of matching documents: {}", ct);
Number of documents: 25216
let ct = my_coll.count_documents().run()?; println!("Number of matching documents: {}", ct);
Number of documents: 25216
Contar documentos específicos
Para devolver un conteo de documentos que coincidan con criterios de búsqueda específicos, pasa tu documento de filtro de query al método count_documents().
El siguiente ejemplo cuenta el número de documentos en los que el valor del campo name incluye la string "Sunset". Selecciona la pestaña Asynchronous o Synchronous para ver el código correspondiente de cada runtime:
let ct = my_coll .count_documents(doc! { "name": doc! { "$regex": "Sunset" } }) .await?; println!("Number of matching documents: {}", ct);
Number of matching documents: 10
let ct = my_coll .count_documents(doc! { "name": doc! { "$regex": "Sunset" } }) .run()?; println!("Number of matching documents: {}", ct);
Number of matching documents: 10
Personalizar el comportamiento de recuento
Puedes modificar el comportamiento del método count_documents() encadenando métodos de opciones a tu llamada count_documents() antes de la llamada a los métodos await o run(). La siguiente tabla describe las opciones que se pueden configurar para personalizar la operación de conteo:
Opción | Descripción |
|---|---|
| La intercalación que se utilizará para la operación. |
| El índice que se utilizará para la operación. |
| El comentario que se va a adjuntar a la operación. |
| Número máximo de documentos a contabilizar. Este valor debe ser un número entero positivo. |
| La cantidad máxima de tiempo en milisegundos que la operación puede ejecutar. |
| El nivel de consistencia de lectura que se utilizará para la operación. |
| El número de documentos que se deben omitir antes de contar documentos. |
| La preferencia de lectura y las etiquetas que se usarán para la operación. |
Recuperar un conteo estimado
Puedes recuperar una estimación de la cantidad de documentos en una colección llamando al método estimated_document_count() antes de llamar al método await o run(). El método estima la cantidad de documentos en función de los metadatos de la colección, lo que puede ser más rápido que realizar un recuento preciso.
El siguiente ejemplo estima el número de documentos en una colección. Seleccione la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada tiempo de ejecución:
let ct = my_coll.estimated_document_count().await?; println!("Number of documents: {}", ct);
Number of documents: 25216
let ct = my_coll.estimated_document_count().run()?; println!("Number of documents: {}", ct);
Number of documents: 25216
Personaliza el comportamiento de conteo estimado
Puedes modificar el comportamiento del método estimated_document_count() encadenando métodos de opciones a tu estimated_document_count() llamar. La siguiente tabla describe las opciones que puedes configurar para personalizar la operación de recuento estimado:
Opción | Descripción |
|---|---|
| La cantidad máxima de tiempo en milisegundos que la operación puede ejecutar. |
| El comentario que se va a adjuntar a la operación. |
| El nivel de consistencia de lectura que se utilizará para la operación. |
| La preferencia de lectura y las etiquetas que se usarán para la operación. |
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: