ORDER BY(NoSQL 查询)
适用范围: NoSQL
可选的 ORDER BY
子句指定查询返回的结果的排序顺序。
语法
ORDER BY <sort_specification>
<sort_specification> ::= <sort_expression> [, <sort_expression>]
<sort_expression> ::= {<scalar_expression> [ASC | DESC]} [ ,...n ]
参数
说明 | |
---|---|
<sort_specification> |
指定对查询结果集进行排序时要依据的属性或表达式。 可将排序列指定为名称或属性别名。 可以指定多个属性。 属性名称必须唯一。 ORDER BY 子句中排序属性的顺序定义了排序的结果集的组织方式。 也就是说,结果集首先按第一个属性排序,然后该有序列表按第二个属性排序,依此类推。 ORDER BY 子句中引用的属性名称必须与所选列表中的某个属性或者与 FROM 子句中指定的集合中定义的某个属性相对应,且不存在任何多义性。 |
<sort_expression> |
指定一个或多个属性或表达式用作排序查询结果集的依据。 |
<scalar_expression> |
表示待计算值的表达式。 |
ASC 或 DESC |
指定应当按升序或降序对指定列中的值进行排序。 ASC 将按照从最低值到最高值的顺序排序。 DESC 将按照从最高值到最低值的顺序排序。 如果未指定此参数,则 ASC (升序)为默认排序顺序。 null 值被视为最低的可能值。 |
注意
有关标量表达式的详细信息,请参阅标量表达式
示例
本节中的示例使用了此参考项集。 每个项都包含一个具有 first
和 last
子属性的 name
属性。
[
{
"name": {
"first": "Casey",
"last": "Jensen"
},
"team": "Human resources"
},
{
"name": {
"first": "Amari",
"last": "Rivera"
},
"team": "Human resources"
},
{
"name": {
"first": "Kayla",
"last": "Lewis"
},
"team": "Human resources"
}
]
在第一个示例中,ORDER BY
子句用于按默认的排序顺序(升序)对字段进行排序。
SELECT VALUE {
firstName: e.name.first,
lastName: e.name.last
}
FROM
employees e
ORDER BY
e.name.last
[
{
"firstName": "Casey",
"lastName": "Jensen"
},
{
"firstName": "Kayla",
"lastName": "Lewis"
},
{
"firstName": "Amari",
"lastName": "Rivera"
}
]
在下一个示例中,排序顺序被显式指定为降序。
SELECT VALUE {
firstName: e.name.first,
lastName: e.name.last
}
FROM
employees e
ORDER BY
e.name.last DESC
[
{
"firstName": "Amari",
"lastName": "Rivera"
},
{
"firstName": "Kayla",
"lastName": "Lewis"
},
{
"firstName": "Casey",
"lastName": "Jensen"
}
]
在最后一个示例中,使用两个字段对项进行了排序,使用了显式指定的排序顺序。 使用两个或更多字段进行排序的查询需要组合索引。
SELECT VALUE {
firstName: e.name.first,
lastName: e.name.last
}
FROM
employees e
ORDER BY
e.name.last DESC,
e.name.first ASC
注解
- 包含
ORDER BY
的查询会返回所有项,包括 ORDER BY 子句中的属性未定义的项。 一般来说,你无法控制不同undefined
类型在结果中的显示顺序。 若要控制未定义值的排序顺序,请为任何undefined
属性分配一个任意值,以确保它们排在定义的值之前或之后。 ORDER BY
子句要求索引策略包含要排序的字段的索引。 查询运行时支持根据属性名称或计算的属性排序。 运行时还支持多个ORDER BY
属性。 若要运行包含多个ORDER BY
属性的查询,请在要排序的字段中定义组合索引。- 如果要排序的属性对于某些项而言可能
undefined
,而你希望在ORDER BY
查询中检索它们,则必须在索引中显式包含此路径。 默认索引策略不允许检索排序属性为“undefined
”的项。