检索数据
概述
在本指南中,您可以学习如何使用 PyMongo(MongoDB 同步 Python 驱动程序)通过使用读取操作从 MongoDB 集合中检索数据。您可以调用find()
或 find_one()
方法来检索符合一组条件的文档。
示例数据
本指南中的示例使用的是来自Atlas 示例数据集的 sample_restaurants.restaurants
集合。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅PyMongo 入门指南.
查找文档
PyMongo 包含两种从集合中检索文档的方法:find_one()
和 find()
。这些方法接受一个 查询过滤器 并返回一个或多个匹配的文档。查询过滤器是一个对象,它指定了您要在查询中检索的文档。
有关查询过滤器的更多信息,请参阅 指定查询。
查找单个文档
要在集合中查找单个文档,调用 find_one()
方法并传递一个查询过滤器,该过滤器指定了你想要查找的文档的准则。如果多个文档匹配查询过滤器,则此方法返回检索结果中的第一个匹配文档,作为 Python 字典。如果没有文档匹配查询过滤器,则方法返回 None
。
提示
find_one()
方法在你知道只有一个匹配文档或你只对第一个匹配项感兴趣时很有用。
以下示例使用 find_one()
方法查找第一个“cuisine”字段值为“Bakery”的文档。
restaurant = sample_restaurants.restaurants.find_one({"cuisine": "Bakery"})
有关排序的更多信息,请参阅排序指南。
查找多个文档
要在集合中查找多个文档,将查询过滤器传递给 find()
方法,该过滤器指定了你想要检索的文档的准则。
以下示例使用 find()
方法查找所有“cuisine”字段值为“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 | 附加到查询的字符串。这有助于您在服务器日志和配置文件数据中跟踪和解释操作。有关查询注释的更多信息,请参阅$comment页面。 |
hint | 用于查询的索引。 |
max_time_ms | 此操作在服务器上的最大执行时间。如果超过此时间,PyMongo将中止操作并引发 ExecutionTimeout 。 |
以下示例使用find()
方法查找所有具有"cuisine"
字段值为"Italian"
的文档,并设置最大执行时间为10秒(10,000毫秒)
cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000)
有关完整参数列表,请参阅API文档中关于find()方法
的说明。
附加信息
有关查询过滤器的更多信息,请参阅 指定查询。
有关使用 PyMongo 获取文档的代码示例,请参阅从 MongoDB 读取数据。
API 文档
要了解本指南中讨论的任何方法或类型,请参阅以下 API 文档