检索不同的字段值
概述
在一个集合中,不同的文档可能包含单个字段的不同值。例如,一个restaurant
文档具有 borough
值为 "Manhattan"
,另一个则具有 borough
值为 "Queens"
。使用 PyMongo,您可以检索一个字段在集合中多个文档中包含的所有不同值。
示例数据
本指南中的示例使用的是来自Atlas 示例数据集的 sample_restaurants.restaurants
集合。要了解如何创建免费的 MongoDB Atlas 集群并加载数据集,请参阅PyMongo 入门指南.
distinct()
方法
要检索指定字段的唯一值,请调用 distinct()
方法,并传入您要找到唯一值的字段名称。
跨集合检索唯一值
以下示例检索《borough
》字段在《restaurants
》集合中的唯一值。
results = restaurants.distinct("borough") for restaurant in results: print(restaurant)
Bronx Brooklyn Manhattan Missing Queens Staten Island
结果显示了在整个集合中所有文档的《borough
》字段中出现的每个唯一值。尽管几个文档在《borough
》字段中有相同的值,但每个值在结果中只出现一次。
检索指定文档的唯一值
您可以为《distinct()
》方法提供一个《查询过滤器》来查找集合中子集文档的唯一字段值。查询过滤器是一个表达式,它指定用于匹配操作的文档的搜索条件。有关创建查询过滤器的更多信息,请参阅指定查询。
以下示例检索所有具有《cuisine
》字段值《"Italian"
》的文档的《borough
》字段的唯一值。
results = restaurants.distinct("borough", { "cuisine": "Italian" }) for restaurant in results: print(restaurant)
Bronx Brooklyn Manhattan Queens Staten Island
修改唯一值行为
《distinct()
》方法接受可选参数,代表您可以使用它们来配置操作的选项。如果您不指定任何选项,则驱动程序不会自定义操作。
以下表格描述了您可以设置的选项以自定义《distinct()
》
属性 | 描述 |
---|---|
filter | 指定从哪些文档中检索唯一值的查询过滤器。 |
会话 | ClientSession 的一个实例。 |
注释 | 用于操作的注释。 |
maxTimeMS | 允许操作运行的最大时间,单位为毫秒。 |
排序 | Collation 的一个实例。 |
以下示例检索所有具有borough
字段值为"Bronx"
和cuisine
字段值为"Pizza"
的文档中name
字段的唯一值。它还使用comment
选项向操作添加注释。
results = restaurants.distinct("name", { "borough": "Bronx", "cuisine": "Pizza" }, comment="Bronx pizza restaurants" )
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant ...
API 文档
要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下API文档