指定要返回的文档
Overview
在本指南中,您可以学习;了解如何通过将以下方法链接到 find()
方法来指定从读取操作中返回哪些文档:
样本数据
restaurants
sample_restaurants
本指南中的示例使用Atlas示例数据集的 数据库中的 集合。要从Scala应用程序访问权限此集合,请创建一个连接到AtlasMongoClient
集群的 ,并将以下值分配给database
和collection
变量:
val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants") val collection: MongoCollection[Document] = database.getCollection("restaurants")
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
Limit
要指定读取操作返回的最大文档数,请使用 FindObservable
类提供的 limit()
方法。调用 find()
方法后,链接 limit()
方法以修改操作的行为。
以下示例查找cuisine
字段值为"Italian"
的所有餐厅,并将结果限制为5
文档:
val filter = equal("cuisine", "Italian") collection.find(filter).limit(5).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Isle Of Capri Resturant", "restaurant_id": "40364373"} {"_id": {"$oid": "..."}, ... , "name": "Marchis Restaurant", "restaurant_id": "40364668"} {"_id": {"$oid": "..."}, ... , "name": "Crystal Room", "restaurant_id": "40365013"} {"_id": {"$oid": "..."}, ... , "name": "Forlinis Restaurant", "restaurant_id": "40365098"} {"_id": {"$oid": "..."}, ... , "name": "Angelo Of Mulberry St.", "restaurant_id": "40365293"}
提示
前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。
Sort
要按指定顺序返回文档,请使用 FindObservable
类提供的 sort()
方法。调用 find()
方法后,链接 sort()
方法以修改操作的行为。
调用 sort()
时,请传递对结果进行排序的字段和排序方向。您可以使用 ascending()
方法将值从低到高排序,也可以使用 descending()
方法将值从高到低排序。
以下示例返回 cuisine
字段值为 "Italian"
的所有文档,并按 name
字段值的升序排序:
val filter = equal("cuisine", "Italian") collection.find(filter).sort(ascending("name")).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "44 Sw Ristorante & Bar", "restaurant_id": "40698807"} {"_id": {"$oid": "..."}, ... , "name": "900 Park", "restaurant_id": "41707964"} {"_id": {"$oid": "..."}, ... , "name": "A Voce", "restaurant_id": "41434084"} ... {"_id": {"$oid": "..."}, ... , "name": "Zucchero E Pomodori", "restaurant_id": "41189590"}
跳过
要在返回查询结果之前跳过指定数量的文档,请使用 FindObservable
类提供的 skip()
方法。调用 find()
方法后,链接 skip()
方法以修改操作的行为。
以下示例返回borough
字段值为"Manhattan"
的所有文档并跳过前10
文档:
val filter = equal("borough", "Manhattan") collection.find(filter).skip(10).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Cafe Metro", "restaurant_id": "40363298"} {"_id": {"$oid": "..."}, ... , "name": "Lexler Deli", "restaurant_id": "40363426"} {"_id": {"$oid": "..."}, ... , "name": "Domino'S Pizza", "restaurant_id": "40363644"} ...
组合限制、排序和跳过
您可以将 limit()
、 sort()
和 skip()
方法链接到单个 find()
方法调用。这允许您设立从读取操作返回的最大排序文档数,在返回之前跳过指定数量的文档。
以下示例返回 cuisine
值为 "Italian"
的 5
文档。结果按 name
字段值升序排序,并跳过前 10
个文档:
val filter = equal("cuisine", "Italian") collection.find(filter) .limit(5) .skip(10) .sort(ascending("name")) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Acqua", "restaurant_id": "40871070"} {"_id": {"$oid": "..."}, ... , "name": "Acqua Restaurant", "restaurant_id": "41591488"} {"_id": {"$oid": "..."}, ... , "name": "Acqua Santa", "restaurant_id": "40735858"} {"_id": {"$oid": "..."}, ... , "name": "Acquista Trattoria", "restaurant_id": "40813992"} {"_id": {"$oid": "..."}, ... , "name": "Acquolina Catering", "restaurant_id": "41381423"}
注意
调用这些方法的顺序不会更改返回的文档。 Scala驾驶员会自动对调用重新排序,以首先执行排序操作,然后执行跳过操作,然后执行限制操作。
更多信息
有关检索文档的更多信息,请参阅检索数据指南。
有关指定查询的更多信息,请参阅“指定查询”指南。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: