文档菜单
文档首页
/ / /
C 驱动程序
/

检索不同的字段值

本页内容

  • 概述
  • 示例数据
  • distinct 命令
  • 检索集合中的不同值
  • 检索指定文档中的不同值
  • 修改distinct行为
  • 附加信息
  • API 文档

在本指南中,您可以了解如何使用C驱动程序从集合中检索指定字段的唯一值。

在集合中,不同的文档可能对单个字段具有不同的值。例如,在restaurant 集合中,一个文档的 borough 值为 "Manhattan",另一个的 borough 值为 "Queens"。通过使用C驱动程序,您可以检索集合中多个文档中字段的全部唯一值。

本指南中的示例使用来自 sample_restaurants 数据库的 restaurants 集合。Atlas 示例数据集。要了解如何创建免费的 MongoDB Atlas 集群并加载数据集,请参阅 Atlas 入门指南

要获取指定字段的唯一值,请调用 mongoc_collection_read_command_with_opts() 函数,并指示它使用 distinct 命令。您还必须指定要检索数据的集合和字段。

以下示例检索了 restaurants 集合中 borough 字段的唯一值

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

结果显示了集合中所有文档的 borough 字段中出现的每个唯一值。尽管多个文档在 borough 字段中具有相同的值,但每个值在结果中只出现一次。

您可以向 distinct 命令提供 查询过滤器,以找到集合中子集文档的唯一字段值。查询过滤器是一个表达式,用于指定用于匹配操作的文档的搜索条件。

有关创建查询过滤器的更多信息,请参阅指定查询.

以下示例检索了所有具有 cuisine 字段值 "Italian" 的文档中 borough 字段的唯一值

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

可以通过传递选项给mongoc_collection_read_command_with_opts()函数来修改distinct命令。如果您没有指定任何选项,驱动程序不会自定义操作。

下表描述了一些可以用于自定义distinct操作的选项

选项
描述
collation
指定排序结果时使用的语言排序类型。更多信息请参见MongoDB服务器手册中的排序
comment
指定要附加到操作上的注释。

要查看可用于修改distinct操作的完整选项列表,请参阅MongoDB服务器手册中的Distinct文档。

以下示例检索所有具有borough字段值为“Bronx”和cuisine字段值为“Pizza”的文档的name字段的唯一值。它还使用comment选项向操作添加注释。

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

要了解更多关于distinct命令的信息,请参阅MongoDB服务器手册中的Distinct页面。

要了解更多关于 mongoc_collection_read_command_with_opts() 函数的信息,请参阅 API 文档。

返回

统计文档数量