Overview
在本指南中,您可以学习;了解如何通过将以下方法链接到 find 方法来指定从读取操作中返回哪些文档:
样本数据
本指南中的示例使用来自 Atlas 示例数据集的 sample_mflix 数据库中的 movies 集合。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅 Atlas 入门指南。
Limit
要指定读取操作返回的最大文档数,应用对该操作应用 limit 选项。您可以通过将 limit 方法链接到 find 方法来设立此选项。
以下示例查找cuisine字段值为'Italian'的所有餐厅,并将结果限制为5文档:
let mut cursor = my_coll .find(doc! { "cuisine": "Italian" }) .limit(5) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "V & T Restaurant", cuisine: "Italian" } Restaurant { name: "Gargiulo'S Restaurant", cuisine: "Italian" } Restaurant { name: "Patsy'S Italian Restaurant", cuisine: "Italian" } Restaurant { name: "John'S Restaurant", cuisine: "Italian" } Restaurant { name: "Ferdinando'S Restaurant", cuisine: "Italian" }
提示
前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。
Sort
要按指定顺序返回文档,应用sort 选项应用于读取操作。您可以通过将 sort setter 方法链接到 find 方法来设立此选项。
调用 sort 时,请传递对结果进行排序的字段和排序方向。排序方向值为 1 时,按从最低到最高的顺序排序;值为 -1 时,按从最高到最低的顺序排序。如果不指定排序, MongoDB不保证查询结果的顺序。
以下示例返回 cuisine字段值为 'Italian' 的所有文档,按 name字段值的升序排序:
let mut cursor = my_coll .find(doc! { "cuisine": "Italian" }) .sort(doc! { "name": 1 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "Antonio'S Trattoria", cuisine: "Italian" } Restaurant { name: "Antonioni'S", cuisine: "Italian" } Restaurant { name: "Antonucci", cuisine: "Italian" } ... Restaurant { name: "Zucchero E Pomodori", cuisine: "Italian" }
跳过
要在返回查询结果之前跳过指定数量的文档,应用skip 选项应用于读取操作。您可以通过将 skip setter 方法链接到 find 方法来设立此选项。
以下示例返回borough字段值为'Manhattan'的所有文档并跳过前10文档:
let mut cursor = my_coll .find(doc! { "borough": "Manhattan" }) .skip(10) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "Beyond Thai Kitchen", cuisine: "Thai" } Restaurant { name: "Rainbow Room", cuisine: "American" } ... Restaurant { name: "Fairfield Inn Suites Penn Station", cuisine: "Other" }
组合限制、排序和跳过
您可以将 limit、sort 和 skip 方法链接到单个 find 方法调用。 这允许您设立从读取操作返回的最大排序文档数,在返回之前跳过指定数量的文档。
以下示例返回 cuisine 值为 'Italian' 的 5 文档。 结果按 name字段值升序排序,并跳过前 10 个文档:
let mut cursor = my_coll .find(doc! { "cuisine": "Italian" }) .sort(doc! { "name": 1 }) .skip(10) .limit(5) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "Acqua", cuisine: "Italian" } Restaurant { name: "Acqua Restaurant", cuisine: "Italian" } Restaurant { name: "Acqua Santa", cuisine: "Italian" } Restaurant { name: "Acquista Trattoria", cuisine: "Italian" } Restaurant { name: "Acquolina Catering", cuisine: "Italian" }
注意
调用这些方法的顺序不会更改返回的文档。服务器会自动对调用重新排序,以首先执行排序操作,然后执行跳过操作,然后执行限制操作。
更多信息
有关检索文档的更多信息,请参阅 查找文档指南。
有关指定查询的更多信息,请参阅“指定查询”指南。
API 文档
要学习;了解有关find 方法及其选项的详情,请参阅API文档。