Docs Menu
Docs Home
/ /

Recuperar valores distintos de campo

En esta guía, puede aprender cómo usar el controlador C para recuperar los valores distintos de un campo especificado en una colección.

Dentro de una colección, diferentes documentos pueden contener distintos valores para un mismo campo. Por ejemplo, un documento en la restaurant 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 distintos que contiene un campo en varios documentos de una colección.

Los ejemplos de esta guía utilizan la colección restaurants en la base de datos sample_restaurants de la Conjuntos de datos de ejemplo de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulte la guía de introducción a MongoDB.

Para recuperar los valores distintos de un campo específico, llame a la función mongoc_collection_read_command_with_opts() e indíquele que use el comando distinct. También debe especificar la colección y el campo de los que se recuperarán los datos.

El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:

bson_t reply;
bson_error_t error;
bson_t *command = BCON_NEW("distinct",
BCON_UTF8("restaurants"),
"key",
BCON_UTF8("borough"));
if (!mongoc_collection_read_command_with_opts(collection, command, NULL, NULL, &reply, &error)) {
fprintf(stderr, "An error occurred: %s\n", error.message);
} else {
char *str = bson_as_canonical_extended_json(&reply, NULL);
printf("%s\n", str);
bson_free(str);
}
bson_destroy(&reply);
bson_destroy(command);
{ "values" : [ "Bronx", "Brooklyn", "Manhattan", "Missing", "Queens", "Staten Island" ], ... }

Los resultados muestran todos los valores distintos que aparecen en el campo borough en todos los documentos de la colección. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor aparece solo una vez en los resultados.

Puede aplicar un filtro de consulta al distinct comando 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 cómo crear filtros de consulta, consulte Especifique una consulta.

El siguiente ejemplo recupera los valores distintos del campo borough para todos los documentos que tienen un valor de campo cuisine de "Italian":

bson_t reply;
bson_error_t error;
bson_t *query = BCON_NEW("cuisine", BCON_UTF8("Italian"));
bson_t *command = BCON_NEW("distinct", BCON_UTF8("restaurants"),
"key", BCON_UTF8("borough"),
"query", BCON_DOCUMENT(query));
if (!mongoc_collection_read_command_with_opts(collection, command, NULL, NULL, &reply, &error)) {
fprintf(stderr, "An error occurred: %s\n", error.message);
} else {
char *str = bson_as_canonical_extended_json(&reply, NULL);
printf("%s\n", str);
bson_free(str);
}
bson_destroy(&reply);
bson_destroy(command);
bson_destroy(query);
{ "values" : [ "Bronx", "Brooklyn", "Manhattan", "Queens", "Staten Island" ], ... }

El comando distinct se puede modificar pasando opciones a la función mongoc_collection_read_command_with_opts(). Si no se especifica ninguna opción, el controlador no personaliza la operación.

La siguiente tabla describe algunas opciones que puede utilizar para personalizar la operación distinct:

Opción
Descripción

collation

Specifies the kind of language collation to use when sorting results. For more information, see Collation in the MongoDB Server manual.

comment

Specifies a comment to attach to the operation.

Para obtener una lista completa de las opciones que puede utilizar para modificar la distinct operación, consulte la documentación de Distinct en el manual de MongoDB Server.

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 utiliza la opción comment para añadir un comentario a la operación.

bson_t reply;
bson_error_t error;
bson_t *query = BCON_NEW("borough", BCON_UTF8("Bronx"),
"cuisine", BCON_UTF8("Pizza"));
bson_t *command = BCON_NEW("distinct", BCON_UTF8("restaurants"),
"key", BCON_UTF8("name"),
"query", BCON_DOCUMENT(query));
bson_t *opts = BCON_NEW("comment", BCON_UTF8("Bronx pizza restaurants"));
if (!mongoc_collection_read_command_with_opts(collection, command, NULL, opts, &reply, &error)) {
fprintf(stderr, "An error occurred: %s\n", error.message);
} else {
char *str = bson_as_canonical_extended_json(&reply, NULL);
printf("%s\n", str);
bson_free(str);
}
bson_destroy(&reply);
bson_destroy(command);
bson_destroy(query);
bson_destroy(opts);
{ "values" : [ "$1.25 Pizza", "18 East Gunhill Pizza", "2 Bros", "Aenos Pizza", "Alitalia Pizza Restaurant", ... ], ... }

Para obtener más información sobre el comando distinct, consulte la página Distinct en el Manual del servidor MongoDB.

Para obtener más información sobre la mongoc_collection_read_command_with_opts() función, consulte la documentación de la API.

Volver

Contabilizar documentos

En esta página