排序构建器
Overview
在本指南中,您可以了解如何使用 MongoDB Java 驱动程序中的构建器为查询指定排序条件。
排序条件是 MongoDB 用于对数据进行排序的规则。 排序条件的一些示例如下:
最小数字到最大数字
一天中的最早时间到一天中的最晚时间
按名字字母顺序排列
构建器是 MongoDB Java 驱动程序提供的类,可帮助您构造 BSON 对象。要了解更多信息,请参阅构建器指南。
如果您想使用构建器来指定查询的排序条件,则应阅读本指南。
如果您想了解 MongoDB Java 驱动程序中的排序基础知识,请考虑阅读我们的排序指南。
本页上的示例使用包含以下文档的样本collection:
{"_id": 1, "letter": "c", "food": "coffee with milk"} {"_id": 3, "letter": "a", "food": "maple syrup"} {"_id": 4, "letter": "b", "food": "coffee with sugar"} {"_id": 5, "letter": "a", "food": "milk and cookies"} {"_id": 2, "letter": "a", "food": "donuts and coffee"} {"_id": 6, "letter": "c", "food": "maple donut"}
Sorts 类
Sorts
类是一个构建器,可为 MongoDB 支持的所有排序条件操作符提供静态工厂方法。 这些方法会返回一个Bson
对象,您可以将其传递给FindIterable
实例的sort()
方法或Aggregates.sort()
。 如果您想了解有关Aggregates
类的更多信息,请参阅我们的聚合构建器指南。
有关此部分中的类和接口的更多信息,请参阅以下 API 文档:
升序
要指定升序排序,请使用Sorts.ascending()
静态工厂方法。 向Sorts.ascending()
传递您需要排序的字段的名称。
以下示例在_id
字段上按升序对样本集合中的文档进行排序:
import static com.mongodb.client.model.Sorts.ascending; // <MongoCollection setup code here> collection.find().sort(ascending("_id"));
上述示例的输出应如下所示:
{"_id": 1, "letter": "c", "food": "coffee with milk"} {"_id": 2, "letter": "a", "food": "donuts and coffee"} {"_id": 3, "letter": "a", "food": "maple syrup"} ...
降序
要指定降序排序,请使用Sorts.descending()
静态工厂方法。 向Sorts.descending()
传递您需要排序的字段的名称。
以下示例在_id
字段上按降序对样本集合中的文档进行排序:
import static com.mongodb.client.model.Sorts.descending; // <MongoCollection setup code here> collection.find().sort(descending("_id"));
前面的示例应输出如下内容:
{"_id": 6, "letter": "c", "food": "maple donut"} {"_id": 5, "letter": "a", "food": "milk and cookies"} {"_id": 4, "letter": "b", "food": "coffee with sugar"} ...
组合排序标准
要组合排序条件,请使用Sorts.orderBy()
静态工厂方法。 此方法可构造一个对象,其中包含排序条件的有序列表。 执行排序时,如果最左边的排序条件的结果为并列,则排序将使用列表中的下一个排序条件来确定顺序。
以下示例在letter
字段上按降序对样本集合中的文档进行排序,如果出现平局,则在_id
字段上升序排序:
import static com.mongodb.client.model.Sorts.orderBy; import static com.mongodb.client.model.Sorts.ascending; import static com.mongodb.client.model.Sorts.descending; // <MongoCollection setup code here> Bson orderBySort = orderBy(descending("letter"), ascending("_id")); collection.find().sort(orderBySort);
上述示例的输出应如下所示:
{"_id": 1, "letter": "c", "food": "coffee with milk"} {"_id": 6, "letter": "c", "food": "maple donut"} {"_id": 4, "letter": "b", "food": "coffee with sugar"} {"_id": 2, "letter": "a", "food": "donuts and coffee"} {"_id": 3, "letter": "a", "food": "maple syrup"} {"_id": 5, "letter": "a", "food": "milk and cookies"}
文本分数
您可以按文本分数对文本搜索结果进行排序,该值表示搜索结果与搜索字符串的匹配程度。 要指定按文本搜索的文本分数排序,请使用Sorts.metaTextScore()
静态工厂方法。 有关如何使用Sorts.metaTextScore()
方法指定排序条件的详细示例,请参阅排序基础知识指南的文本搜索部分。
有关详细信息,请参阅 Sorts 类 API 文档。