Overview
En esta guía, puede aprender a utilizar el controlador C++ para recuperar los distintos valores de un campo específico en una colección.
Dentro de una colección, diferentes documentos pueden contener distintos valores para un mismo campo. Por ejemplo, un documento en una restaurants Una colección tiene un valor borough de "Manhattan" y otra tiene un valor borough de "Queens". Con el controlador de C++, puede recuperar todos los valores únicos que contiene un campo en varios documentos de 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 la Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde su aplicación C++, cree una mongocxx::client instancia de que se conecte a un clúster de Atlas y asigne los siguientes valores a las variables db collection y:
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción a MongoDB.
distinct() Método
Para recuperar los valores distintos de un campo específico, llame al método distinct() y pase el nombre del campo para el cual desea encontrar valores distintos.
Recuperar valores distintos en una colección
El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:
auto cursor = collection.distinct("borough", {}); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "values" : [ "Bronx", "Brooklyn", "Manhattan", "Missing", "Queens", "Staten Island" ], "ok" : 1.0, "$clusterTime" : { "clusterTime" : { "$timestamp" : { ... } }, "signature" : { "hash" : { ... }, "keyId" : ... } }, "operationTime" : { "$timestamp" : { ... } }
La operación devuelve un cursor que contiene un solo documento. El documento incluye una lista de valores de campo borough distintos y metadatos sobre la operación. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor aparece solo una vez en los resultados.
Recupere valores distintos en documentos especificados
Puede proporcionar un filtro de consulta al distinct() método para encontrar los distintos valores de campo en un subconjunto de documentos de una colección. Un filtro de consulta es una expresión que especifica los criterios de búsqueda utilizados para encontrar coincidencias en los documentos de una operación. Para obtener más información sobre la creación de un filtro de consulta, consulte Especifique una guía de consulta.
El siguiente ejemplo recupera los valores distintos del campo borough para todos los documentos que tienen un valor de campo cuisine de "Italian":
auto cursor = collection.distinct("borough", make_document(kvp("cuisine", "Italian"))); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "values" : [ "Bronx", "Brooklyn", "Manhattan", "Queens", "Staten Island" ], "ok" : 1.0, "$clusterTime" : { "clusterTime" : { "$timestamp" : { ... }, "signature" : { "hash" : { ... }, "keyId" : ... } }, "operationTime" : { "$timestamp" : { ... } }
Modificar el comportamiento de Distinct
Puede modificar el comportamiento del método distinct() pasando una instancia de la clase mongocxx::options::distinct como argumento. La siguiente tabla describe los campos que puede configurar en una instancia mongocxx::options::distinct:
Campo | Descripción |
|---|---|
| The collation to use for the operation. Type: bsoncxx::document::view_or_value |
| The maximum amount of time in milliseconds that the operation can run. Type: std::chrono::milliseconds |
| The comment to attach to the operation. Type: bsoncxx::types::bson_value::view_or_value |
| The read preference to use for the operation. Type: mongocxx::read_preference |
El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos cuyo valor de campo borough es "Bronx" y cuyo valor de campo cuisine es "Pizza". También especifica el campo comment de una instancia de opciones para añadir un comentario a la operación:
mongocxx::options::distinct opts{}; opts.comment(bsoncxx::types::bson_value::view_or_value{"Bronx pizza restaurants"}); auto cursor = collection.distinct("name", make_document(kvp("$and", make_array(make_document(kvp("borough", "Bronx")), make_document(kvp("cuisine", "Pizza"))))), opts ); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "values" : [ "$1.25 Pizza", "18 East Gunhill Pizza", "2 Bros", "Aenos Pizza", "Alitalia Pizza Restaurant", … ], "ok" : 1.0, "$clusterTime" : { "clusterTime" : { … }, "signature" : { … }, "keyId" : … } }, "operationTime" : { … } }
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: