检索不同字段值
Overview
在本指南中,您可以学习;了解如何使用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
操作的一些选项:
选项 | 说明 |
---|---|
| 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. |
有关可用于修改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 页面。
API 文档
要学习;了解有关mongoc_collection_read_command_with_opts()
函数的详情,请参阅API文档。