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> 表示待计算值的表达式。
ASCDESC 指定应当按升序或降序对指定列中的值进行排序。 ASC 将按照从最低值到最高值的顺序排序。 DESC 将按照从最高值到最低值的顺序排序。 如果未指定此参数,则 ASC(升序)为默认排序顺序。 null 值被视为最低的可能值。

注意

有关标量表达式的详细信息,请参阅标量表达式

示例

本节中的示例使用了此参考项集。 每个项都包含一个具有 firstlast 子属性的 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”的项。