Recuperar valores de campo distintos
Nesta página
Visão geral
Neste guia, você pode aprender a usar o driver C para recuperar os valores distintos de um campo especificado em uma collection.
Dentro de uma coleção, documentos diferentes podem conter valores diferentes para um único campo. Por exemplo, um documento na coleção restaurant
tem um valor borough
de "Manhattan"
e outro tem um valor borough
de "Queens"
. Ao usar o driver C, você pode recuperar todos os valores distintos que um campo contém em vários documentos em uma collection.
Dados de amostra
Os exemplos neste guia utilizam a coleção do restaurants
no banco de dados de dados do sample_restaurants
a partir dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Comando Distinto
Para recuperar os valores distintos para um campo especificado, chame a função mongoc_collection_read_command_with_opts()
e direcione-a para usar o comando distinct
. Você também deve especificar a coleção e o campo dos quais recuperar dados.
Recuperar valores distintos em uma collection
O exemplo seguinte recupera os valores distintos do campo borough
na coleção 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" ], ... }
Os resultados mostram cada valor distinto que aparece no campo borough
em todos os documentos da coleção. Embora vários documentos tenham o mesmo valor no campo borough
, cada valor aparece nos resultados apenas uma vez.
Recuperar valores distintos em documentos especificados
Você pode fornecer um filtro de query para o distinct
comando para localizar os valores de campo distintos em um subconjunto de documentos em uma collection. Um filtro de query é uma expressão que especifica os critérios de pesquisa usados para corresponder a documentos em uma operação.
Para saber mais sobre como criar filtros de query, consulte Especificar uma query.
O exemplo a seguir recupera os valores distintos do campo borough
para todos os documentos que têm um 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" ], ... }
Modificar comportamento distinto
O comando distinct
pode ser modificado passando opções para a função mongoc_collection_read_command_with_opts()
. Se você não especificar nenhuma opção, o driver não personalizará a operação.
A tabela seguinte descreve algumas opções que você pode utilizar para personalizar a operação do distinct
:
Opção | Descrição |
---|---|
| Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
| Specifies a comment to attach to the operation. |
Para obter uma lista completa de opções que você pode usar para modificar a distinct
operação, consulte a documentação Distinct no manual do MongoDB Server .
O exemplo a seguir recupera os valores distintos do campo name
para todos os documentos que têm um valor de campo borough
de "Bronx"
e um valor de campo cuisine
de "Pizza"
. Ele também usa a opção comment
para adicionar um comentário à operação.
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", ... ], ... }
Informações adicionais
Para saber mais sobre o comando distinct, consulte a página Distinct no Manual do MongoDB Server .
Documentação da API
Para saber mais sobre a mongoc_collection_read_command_with_opts()
função, consulte a documentação API.