文档菜单

文档首页开发应用程序Python 驱动程序PyMongo

检索数据

本页内容

  • 概述
  • 示例数据
  • 查找文档
  • 查找单个文档
  • 查找多个文档
  • 修改查找行为
  • 更多信息
  • API 文档

在本指南中,您可以学习如何使用 PyMongo,MongoDB 同步 Python 驱动程序,通过使用读取操作从 MongoDB 集合中检索数据。您可以调用find()find_one() 方法来检索符合一组条件的文档。

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

PyMongo 包含两种从集合中检索文档的方法:find_one()find()。这些方法接受一个 查询过滤器 并返回一个或多个匹配的文档。查询过滤器是一个对象,它指定了您在查询中想要检索的文档。

要了解更多关于查询过滤器的内容,请参阅 指定查询。

要在一个集合中查找单个文档,调用 find_one() 方法并传递一个查询过滤器,该过滤器指定了您想要找到的文档的准则。如果多个文档与查询过滤器匹配,则此方法返回检索结果中的 第一个 匹配的文档作为 Python 字典。如果没有文档与查询过滤器匹配,则方法返回 None

提示

find_one() 方法在您知道只有一个匹配的文档,或者您只对第一个匹配项感兴趣时非常有用。

以下示例使用 find_one() 方法查找第一个字段值为 "Bakery" 的文档。

restaurant = sample_restaurants.restaurants.find_one({"cuisine": "Bakery"})

提示

排序顺序

如果未指定排序标准,则 find_one() 方法返回磁盘上的第一个文档,这是在自然顺序上。

要了解更多关于排序的信息,请参阅 排序指南。

要在一个集合中查找多个文档,将查询过滤器传递给 find() 方法,该过滤器指定了您想要检索的文档的准则。

以下示例使用 find() 方法查找所有字段值为 "Spanish" 的文档。

cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})

您可以使用 游标 遍历由 find() 方法返回的文档。游标是一种机制,允许应用程序在给定时间只保留数据库结果的一小部分的同时遍历数据库结果。当您的 find() 方法返回大量文档时,游标非常有用。

您可以使用 for-in 循环遍历游标中的文档,如下例所示

cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})
for restaurant in cursor:
...

注意

查找所有文档

要查找集合中的所有文档,请将空过滤器传递给 find() 方法

all_restaurants = sample_restaurants.restaurants.find({})

您可以通过向其传递命名参数来修改 find()find_one() 方法的行为。以下表格描述了常用参数

参数
描述
batch_size
限制游标在给定时间保留的文档数量。
collation
设置校对选项的 Collation 类的一个实例。
注释
附加到查询的字符串。这可以帮助您在服务器日志和配置文件数据中跟踪和解释操作。有关查询注释的更多信息,请参阅 $comment 页面。
提示
用于查询的索引。
max_time_ms
此操作在服务器上的最大执行时间。如果超出此时间,PyMongo 将终止操作并引发 ExecutionTimeout

以下示例使用 find() 方法查找所有“cuisine”字段值为“意大利”的文档,并设置最大执行时间为10秒(10,000毫秒)

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000)

有关可用参数的完整列表,请参阅 API 文档 中的 find() 方法

要了解更多关于查询过滤器的内容,请参阅 指定查询。

有关使用 PyMongo 获取文档的可运行代码示例,请参阅 从 MongoDB 读取数据。

有关本指南中讨论的任何方法或类型,请参阅以下 API 文档

← 指定查询