Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Recuperar valores distintos de campo

En esta guía, puedes aprender a usar el driver de C++ para recuperar los valores distintos de un campo especificado en una colección.

Dentro de una colección, diferentes documentos pueden contener diferentes valores para un mismo campo. Por ejemplo, un documento en un restaurants La colección tiene un valor de borough de "Manhattan", y otra tiene un valor de borough de "Queens". Al utilizar el controlador de C++, puedes recuperar todos los valores únicos que un campo contiene en varios documentos de una colección.

Los ejemplos de esta guía usan 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++, instancie un mongocxx::client que se conecte a un clúster de Atlas y asigne los siguientes valores a sus variables db y collection:

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 ejemplo, consulta la guía MongoDB Get Started.

Para recuperar los valores distintos de un campo especificado, llama al método distinct() y pasa el nombre del campo para el que deseas encontrar valores distintos.

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 único documento. El documento incluye una lista de valores distintos del campo borough y metadatos sobre la operación. Aunque varios documentos tengan el mismo valor en el campo borough, cada valor aparece solo una vez en los resultados.

Puede proporcionar un filtro de query al método distinct() para encontrar los valores distintos de un campo en un subconjunto de documentos de una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para comparar documentos en una operación. Para obtener más información sobre cómo crear un filtro de query, consulte el Guía 'Especificar una query' .

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" : { ... } }

Puedes 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 puedes configurar en una instancia de mongocxx::options::distinct:

Campo
Descripción

collation

The collation to use for the operation.
Type: bsoncxx::document::view_or_value

max_time

The maximum amount of time in milliseconds that the operation can run.
Type: std::chrono::milliseconds

comment

The comment to attach to the operation.
Type: bsoncxx::types::bson_value::view_or_value

read_preference

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 que tienen un valor de campo borough de "Bronx" y un valor de campo cuisine de "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" : { … } }

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Especifique los campos a devolver

En esta página