Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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 diferentes valores para un solo campo. Por ejemplo, un documento en la colección restaurant tiene un valor borough de "Manhattan", y otro tiene valor borough de "Queens". Mediante el controlador C, se puede recuperar todos los valores distintos que un campo contiene en varios documentos de una colección.

Los ejemplos en esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los 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, consulta la guía MongoDB Primeros Pasos.

Para recuperar los valores distintos de un campo especificado, llama a la función mongoc_collection_read_command_with_opts() e indícale que use el comando distinct. También debe especificar la colección y el campo del que recuperar 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 cada valor distinto que aparece 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 en los resultados solo una vez.

Puede proporcionar un filtro de query al comando distinct para encontrar los valores distintos de campo en un subconjunto de documentos dentro de una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para hacer coincidir documentos en una operación.

Para obtener más información sobre cómo crear filtros de query, consulte 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":

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 especificas ninguna opción, el driver no personaliza la operación.

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

Opción
Descripción

collation

Especifica el tipo de intercalación de lenguaje a usar al ordenar los resultados. Para obtener más información, consulte intercalación en el manual de MongoDB Server.

comment

Especifica un comentario para adjuntar a la operación.

Para ver una lista completa de opciones que puede usar para modificar la operación distinct, 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 que tengan un valor de campo borough de "Bronx" y un valor de campo cuisine de "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 distinto, consulta la Distinct página en el Manual de MongoDB Server.

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