Overview
在本指南中,您可以学习;了解如何通过将以下方法链接到 find 方法来指定从读取操作中返回哪些文档:
样本数据
本指南中的示例使用Atlas示例数据集的 sample_restaurants数据库中的 restaurants集合。要从Ruby应用程序访问权限此集合,请创建一个连接到Atlas 集群的Mongo::Client对象,并将以下值分配给 database 和 collection 变量:
database = client.use('sample_restaurants') collection = database[:restaurants]
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅MongoDB入门指南。
Limit
要指定读取操作返回的最大文档数,应用对该操作应用 limit 选项。您可以通过将 limit setter 方法链接到 find 方法来设立此选项。
以下示例查找cuisine字段值为'Italian'的所有餐厅,并将结果限制为5文档:
filter = { cuisine: 'Italian' } collection.find(filter) .limit(5) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Philadelhia Grille Express", "restaurant_id"=>"40364305"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Isle Of Capri Restaurant", "restaurant_id"=>"40364373"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Marchis Restaurant", "restaurant_id"=>"40364668"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Crystal Room", "restaurant_id"=>"40365013"} {"_id"=>BSON::ObjectId('...'), ... , name"=>"Forlinis Restaurant", "restaurant_id"=>"40365098"}
提示
前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。
Sort
要按指定顺序返回文档,应用sort 选项应用于读取操作。您可以通过将 sort setter 方法链接到 find 方法来设立此选项。
调用 sort 时,请传递对结果进行排序的字段和排序方向。排序方向值为 1 时,按从最低到最高的顺序排序;值为 -1 时,按从最高到最低的顺序排序。
以下示例返回 cuisine字段值为 'Italian' 的所有文档,按 name字段值的升序排序:
filter = { cuisine: 'Italian' } collection.find(filter) .sort(name: 1) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"(Lewis Drug Store) Locanda Vini E Olii", "restaurant_id"=>"40804423"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"101 Restaurant And Bar", "restaurant_id"=>"40560108"} ... {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Zucchero E Pomodori", "restaurant_id"=>"41189590"}
跳过
要在返回查询结果之前跳过指定数量的文档,应用skip 选项应用于读取操作。您可以通过将 skip setter 方法链接到 find 方法来设立此选项。
以下示例返回borough字段值为'Manhattan'的所有文档并跳过前10文档:
filter = { borough: 'Manhattan' } collection.find(filter) .skip(10) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Cafe Metro", "restaurant_id"=>"40363298"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Lexler Deli", "restaurant_id"=>"40363426"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Domino'S Pizza", "restaurant_id"=>"40363644"} ...
组合限制、排序和跳过
您可以将 limit、sort 和 skip 方法链接到单个 find 方法调用。 这允许您设立从读取操作返回的最大排序文档数,在返回之前跳过指定数量的文档。
以下示例返回 cuisine 值为 'Italian' 的 5 文档。 结果按 name字段值升序排序,并跳过前 10 个文档:
filter = { cuisine: 'Italian' } collection.find(filter) .limit(5) .skip(10) .sort(name: 1) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua", "restaurant_id"=>"40871070"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua Restaurant", "restaurant_id"=>"41591488"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua Santa", "restaurant_id"=>"40735858"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acquista Trattoria", "restaurant_id"=>"40813992"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acquolina Catering", "restaurant_id"=>"41381423"}
注意
调用这些方法的顺序不会更改返回的文档。Ruby驱动程序会自动对调用重新排序,以首先执行排序操作,然后执行跳过操作,然后执行限制操作。
更多信息
有关检索文档的更多信息,请参阅 查找文档指南。
有关指定查询的更多信息,请参阅“指定查询”指南。
API 文档
要学习;了解有关 find 方法及其选项的详情,请参阅API文档。