Docs 菜单
Docs 主页
/ / /
C 驱动程序
/

检索不同字段值

在此页面上

  • Overview
  • 样本数据
  • 不同命令
  • 检索集合中的不同值
  • 检索指定文档中的不同值
  • 修改不同行为
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用C驾驶员检索集合中指定字段的不同值。

在集合中,不同文档的单个字段可能包含不同值。示例, restaurant集合中的一个文档的 borough 值为 "Manhattan",而另一文档的 borough 值为 "Queens"。通过使用C驾驶员,您可以检索集合中多个文档中某个字段包含的所有不同值。

本指南中的示例使用 Atlas示例数据集sample_restaurants数据库中的restaurants集合。 要学习;了解如何创建免费的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

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.

有关可用于修改distinct 操作的选项的完整列表,请参阅MongoDB Server手册中的 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 Server手册中的 Distinct 页面。

要学习;了解有关mongoc_collection_read_command_with_opts() 函数的详情,请参阅API文档。

后退

计算文档