文档菜单
文档首页
/ / /
PyMongo
/

指定返回文档

本页内容

  • 概述
  • 示例数据
  • 限制
  • 排序
  • 跳过
  • 组合限制、排序和跳过
  • 附加信息
  • API文档

在本指南中,您可以学习如何通过以下方法指定从读取操作中返回哪些文档:

  • limit():指定查询返回的最大文档数。

  • sort():指定返回文档的排序顺序。

  • skip():指定在返回查询结果之前要跳过的文档数。

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

要指定从读取操作返回的最大文档数,请调用limit()方法。

以下示例查找所有具有cuisine字段值为"Italian"的餐厅,并将结果限制为5个文档

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

您还可以通过指定您的 find() 方法中的 limit 参数来限制返回的文档数量

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

提示

前面的示例返回查询返回的前五个文档,没有特定的顺序。以下部分描述了如何按指定的排序顺序返回文档。

要按指定顺序返回文档,请调用 sort() 方法。该 sort() 方法接受两个参数:排序结果的字段和排序方向。要指定排序方向,指定 pymongo.ASCENDINGpymongo.DESCENDINGASCENDING 按从低到高排序值,而 DESCENDING 按从高到低排序。如果您不指定任何方向,则默认按升序排序。

以下示例返回所有具有 cuisine 值为 "Italian" 的文档,并按升序排序

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

您还可以通过在 find() 方法中指定 sort 参数来排序文档。以下示例指定与前面示例相同的 sort 参数以返回相同的结果

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

要跳过指定数量的文档,在返回查询结果之前,请调用 skip() 方法并传入要跳过的文档数。该 skip() 方法忽略查询结果中指定的文档数,并返回其余文档。

以下示例返回所有具有 borough 字段值为 "Manhattan" 的文档,并跳过前10个文档

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
...

您还可以通过使用 find() 方法的 skip 参数来跳过返回的文档。以下示例指定与前面示例相同的跳过数

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
...

您可以在单个操作中组合 limit()sort()skip() 方法。这允许您设置返回的最大文档数,并在返回前跳过指定数量的文档。

以下示例返回具有 cuisine 值为 "Italian" 的文档。结果按字母顺序排序,跳过前10个文档。

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

注意

调用这些方法的顺序不会改变返回的文档。驱动程序会自动重新排序调用,首先执行排序和跳过操作,然后执行限制操作。

您还可以通过在 find() 方法中指定参数来限制、排序和跳过结果。以下示例指定了与前面示例相同的查询。

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

有关指定查询的更多信息,请参阅 指定查询。

有关检索文档的更多信息,请参阅 检索数据。

要了解更多关于本指南中讨论的任何方法或类型,请参阅以下 API 文档

返回

指定返回字段