OFFSET LIMIT(NoSQL 查询)

适用范围: NoSQL

OFFSET LIMIT 字句是一个可选子句,它会跳过然后提取查询中特定数目的值。 必须在 LIMIT 子句中指定 OFFSET 计数和 LIMIT 计数。

OFFSET LIMITORDER BY 子句结合使用时,将通过跳过然后提取排序值来生成结果集。 如果不使用 ORDER BY 子句,则会生成值的确定顺序。

语法

OFFSET <offset_amount> LIMIT <limit_amount>

参数

说明
<offset_amount> 指定查询结果应跳过的项数(整数)。
<limit_amount> 指定查询结果应包含的项数(整数)。

示例

在本部分中的示例中,使用此引用的项集。 每个项都包含一个 name 属性。

[
  {
    "name": "Sawyer Miller",
  },
  {
    "name": "Jennifer Wilkins",
  },
  {
    "name": "Hannah Haynes",
  },
  {
    "name": "Isaac Talbot",
  },
  {
    "name": "Riley Johnson",
  }
]

注意

在原始 JSON 数据中,不会对项进行排序。

第一个示例包括一个查询,该查询仅返回按字母顺序排序的所有项中的 name 属性。

SELECT VALUE {
    name: e.name
}
FROM
    employees e
WHERE
    e.team = "Leadership team"
ORDER BY
    e.name
[
  {
    "name": "Hannah Haynes"
  },
  {
    "name": "Isaac Talbot"
  },
  {
    "name": "Jennifer Wilkins"
  },
  {
    "name": "Riley Johnson"
  },
  {
    "name": "Sawyer Miller"
  }
]

下一个示例包括一个使用 OFFSET LIMIT 子句跳过第一项的查询。 该限制被设置为容器中的项数,以返回所有可能的剩余值。 在此示例中,该查询跳过一项,并返回其余四项(上限为五项)

SELECT VALUE {
    name: e.name
}
FROM
    employees e
WHERE
    e.team = "Leadership team"
ORDER BY
    e.name
OFFSET 1 LIMIT 5
[
  {
    "name": "Isaac Talbot"
  },
  {
    "name": "Jennifer Wilkins"
  },
  {
    "name": "Riley Johnson"
  },
  {
    "name": "Sawyer Miller"
  }
]

最后一个示例包括一个查询,该查询使用 OFFSET LIMIT 子句通过跳过一项并获取接下来的三项来返回匹配项的子集

SELECT VALUE {
    name: e.name
}
FROM
    employees e
WHERE
    e.team = "Leadership team"
ORDER BY
    e.name
OFFSET 1 LIMIT 3
[
  {
    "name": "Isaac Talbot"
  },
  {
    "name": "Jennifer Wilkins"
  },
  {
    "name": "Riley Johnson"
  }
]

注解

  • 必须在 OFFSET LIMIT 子句中同时指定 OFFSET 计数和 LIMIT 计数。 如果使用可选的 ORDER BY 子句,将会通过跳过排序值来生成结果集。 否则,查询将返回固定顺序的值。
  • 使用 OFFSET LIMIT 进行查询时的 RU 费用会随着要跳过的字词数量的增加而增加。 对于有多个结果页的查询,我们通常建议使用继续标记。 继续标记是一个“书签”,用于在以后恢复查询。 如果使用 OFFSET LIMIT,则没有“书签。”如果希望返回查询的下一页,则必须从头开始。
  • 如果希望完全跳过项并保存客户端资源,则应使用 OFFSET LIMIT。 例如,如果要跳到第 1000 个查询结果,无需查看第 1 到第 999 个结果,则应使用 OFFSET LIMIT。 在后端,OFFSET LIMIT 仍会加载每个项,包括那些跳过的项。 性能优势体现在通过避免处理不需要的项目来减少客户端资源。