在本指南中,您可以学习;了解如何使用以下方法指定从读取操作中返回哪些文档:
本指南中的示例使用 Atlas示例数据集中的sample_restaurants.restaurants集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅 PyMongo入门教程。
要指定读取操作返回的最大文档数,请调用limit()方法。
以下示例查找 cuisine字段值为 "Italian" 的所有餐厅,并将结果限制为 5 文档。选择 Synchronous 或 Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "cuisine" : "Italian"}).limit(5) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| Isle Of Capri Resturant Italian |
| Arturo'S Italian |
| Patsy'S Italian Restaurant Italian |
| Piccola Venezia Italian |
| Roadhouse Restaurant Italian |
| results = restaurants.find({ "cuisine" : "Italian"}).limit(5) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| Isle Of Capri Resturant Italian |
| Arturo'S Italian |
| Patsy'S Italian Restaurant Italian |
| Piccola Venezia Italian |
| Roadhouse Restaurant Italian |
您还可以通过在 find() 方法中指定 limit 参数来限制返回的文档数量。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "cuisine" : "Italian"}, limit=5) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| Isle Of Capri Resturant Italian |
| Arturo'S Italian |
| Patsy'S Italian Restaurant Italian |
| Piccola Venezia Italian |
| Roadhouse Restaurant Italian |
| results = restaurants.find({ "cuisine" : "Italian"}, limit=5) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| Isle Of Capri Resturant Italian |
| Arturo'S Italian |
| Patsy'S Italian Restaurant Italian |
| Piccola Venezia Italian |
| Roadhouse Restaurant Italian |
提示
前面的示例返回查询返回的前五个文档(排名不分先后)。 以下部分介绍如何按指定的排序顺序返回文档。
要按指定顺序返回文档,请调用sort()方法。 sort()方法接受两个参数:对结果进行排序的字段和排序方向。 要指定排序方向,请指定pymongo.ASCENDING或pymongo.DESCENDING 。 ASCENDING将值从最低到最高排序, DESCENDING将值从最高到最低排序。 如果未指定任一方向,则该方法默认按升序排序。
以下示例返回 cuisine 值为 "Italian" 的所有文档,并按升序排序。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "cuisine" : "Italian"}).sort("name", pymongo.ASCENDING) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| (Lewis Drug Store) Locanda Vini E Olii |
| 101 Restaurant And Bar |
| 44 Sw Ristorante & Bar |
| 900 Park |
| A Voce |
| ... |
| Zucchero E Pomodori |
| results = restaurants.find({ "cuisine" : "Italian"}).sort("name", pymongo.ASCENDING) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| (Lewis Drug Store) Locanda Vini E Olii |
| 101 Restaurant And Bar |
| 44 Sw Ristorante & Bar |
| 900 Park |
| A Voce |
| ... |
| Zucchero E Pomodori |
您还可以通过在 find() 方法中指定 sort 参数来对文档进行排序。以下示例指定 sort 参数,以按照与上一示例相同的顺序返回结果。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "cuisine" : "Italian"}, sort={"name": pymongo.ASCENDING} ) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| (Lewis Drug Store) Locanda Vini E Olii |
| 101 Restaurant And Bar |
| 44 Sw Ristorante & Bar |
| 900 Park |
| A Voce |
| ... |
| Zucchero E Pomodori |
| results = restaurants.find({ "cuisine" : "Italian"}, sort={"name": pymongo.ASCENDING} ) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| (Lewis Drug Store) Locanda Vini E Olii |
| 101 Restaurant And Bar |
| 44 Sw Ristorante & Bar |
| 900 Park |
| A Voce |
| ... |
| Zucchero E Pomodori |
要在返回查询结果之前跳过指定数量的文档,请调用skip()方法并传入要跳过的文档数。 skip()方法会忽略查询结果中指定数量的文档并返回其余文档。
以下示例返回 borough字段值为 "Manhattan" 的所有文档,并跳过前 10 个文档。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "borough" : "Manhattan"}, skip=10) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| Dorrian'S Red Hand Restaurant |
| The Princeton Club |
| Moran'S Chelsea |
| La Parisienne Diner |
| Jimmy'S Corner |
| ... |
| results = restaurants.find({ "borough" : "Manhattan"}, skip=10) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| Dorrian'S Red Hand Restaurant |
| The Princeton Club |
| Moran'S Chelsea |
| La Parisienne Diner |
| Jimmy'S Corner |
| ... |
您还可以使用 find() 方法的 skip 参数跳过返回的文档。以下示例指定了与前面的示例相同的 skip。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "borough" : "Manhattan"}, skip=10) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| Dorrian'S Red Hand Restaurant |
| The Princeton Club |
| Moran'S Chelsea |
| La Parisienne Diner |
| Jimmy'S Corner |
| ... |
| results = restaurants.find({ "borough" : "Manhattan"}, skip=10) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| Dorrian'S Red Hand Restaurant |
| The Princeton Club |
| Moran'S Chelsea |
| La Parisienne Diner |
| Jimmy'S Corner |
| ... |
您可以在单个操作中组合使用limit() 、 sort()和skip()方法。 这允许您设置要返回的最大排序文档数,在返回之前跳过指定数量的文档。
以下示例返回 cuisine 值为 "Italian" 的文档。结果按字母顺序排序,跳过前 10 个文档。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "cuisine" : "Italian"}) \ |
| .sort("name", pymongo.ASCENDING) \ |
| .limit(5) \ |
| .skip(10) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| Acqua |
| Acqua Restaurant |
| Acqua Santa |
| Acquista Trattoria |
| Acquolina Catering |
| results = restaurants.find({ "cuisine" : "Italian"}) \ |
| .sort("name", pymongo.ASCENDING) \ |
| .limit(5) \ |
| .skip(10) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| Acqua |
| Acqua Restaurant |
| Acqua Santa |
| Acquista Trattoria |
| Acquolina Catering |
注意
调用这些方法的顺序不会更改返回的文档。 驾驶员会自动对调用重新排序,以首先执行排序和跳过操作,然后执行限制操作。
您还可以在 find() 方法中将结果指定为参数,从而对结果进行限制、排序和跳过。以下示例指定与前面的示例相同的查询。选择Synchronous或Asynchronous标签页以查看相应的代码:
| results = restaurants.find({ "cuisine" : "Italian"}, limit=5, sort={"name": pymongo.ASCENDING}, skip=10) |
|
| for restaurant in results: |
| print(restaurant["name"]) |
| Acqua |
| Acqua Restaurant |
| Acqua Santa |
| Acquista Trattoria |
| Acquolina Catering |
| results = restaurants.find({ "cuisine" : "Italian"}, limit=5, sort={"name": pymongo.ASCENDING}, skip=10) |
|
| async for restaurant in results: |
| print(restaurant["name"]) |
| Acqua |
| Acqua Restaurant |
| Acqua Santa |
| Acquista Trattoria |
| Acquolina Catering |
有关指定查询的更多信息,请参阅指定查询。
有关检索文档的更多信息,请参阅查找文档。
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: