Menu Docs
Página inicial do Docs
/ / /
Driver C
/

Recuperar valores de campo distintos

Nesta página

  • Visão geral
  • Dados de amostra
  • Comando Distinto
  • Recuperar valores distintos em uma collection
  • Recuperar valores distintos em documentos especificados
  • Modificar comportamento distinto
  • Informações adicionais
  • Documentação da API

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.

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 .

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.

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.

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" ], ... }

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

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 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", ... ], ... }

Para saber mais sobre o comando distinct, consulte a página Distinct no Manual do MongoDB Server .

Para saber mais sobre a mongoc_collection_read_command_with_opts() função, consulte a documentação API.

Voltar

Contagem de documentos