LIMIT操作
使用LIMIT操作可以将结果数量限制在指定的数值范围内,可以使用偏移量来实现分页
语法
两种常用的语法:
LIMIT count
LIMIT offset, count
第一种形式只允许指定计数值,而第二种形式允许指定偏移量和计数值。使用偏移值为0的第二种形式时,第一种形式是相同的。
使用
FOR u IN users
LIMIT 5
RETURN u
上面的查询返回了用户集合中的五个文档。它也可以写成 LIMIT 0, 5,得到同样的结果。它返回哪些文档是任意的,因为集合中没有定义文档的顺序。 LIMIT 操作通常应该伴随一个 SORT 操作来明确指定排序顺序,除非任何五个文档对你都是可接受的。但是,还要考虑如果你多次运行查询,并且使用不同的 LIMIT 偏移量进行分页,如果排序顺序未定义,则可能会错过结果或得到重复的结果。
如果多个文档包含相同的SORT属性值,则结果集不包含固定顺序的绑定文档,因为它们之间的顺序未定义。此外,如果没有唯一值可以排序,SORT操作不能保证稳定的排序。
如果需要一个固定的总顺序,你可以使用一个tiebreaker。按另一个可以打破平局的属性排序。如果应用程序有一个首选属性,指示具有相同值的文档的顺序,那么使用这个属性。如果没有这样的属性,你仍然可以通过使用_id系统属性来实现稳定的排序,因为它在每个文档中都是唯一的。
FOR u IN users
SORT u.firstName, u._id // break name ties with the document ID
LIMIT 5
RETURN u
偏移值指定应跳过结果中的多少个元素。它必须是 0 或更大。计数值指定结果中最多应包含多少个元素。
FOR u IN users
SORT u.firstName, u.lastName, u.id DESC
LIMIT 2, 5
RETURN u
在上面的例子中,用户的文档被排序,前两个结果被跳过,查询返回接下来的五个用户文档
变量、表达式和子查询不能用于偏移和计数。偏移和计数的值必须在查询编译时已知,这意味着您只能使用数字文本、绑定参数或可以在查询编译时解析的表达式。
在查询中使用 LIMIT 与其他操作相关时具有意义。特别是 FILTER 之前的 LIMIT 操作可能会显著改变结果,因为这些操作是按照它们在查询中写入的顺序执行的。有关详细示例,请参阅 FILTER。
在查询中,LIMIT操作与其他操作的关系非常重要。特别是在FILTER操作之前使用LIMIT,可能会对查询结果产生显著的影响,因为查询中的操作是按照书写的顺序执行的。
在以下示例中,LIMIT操作并不影响写入操作(INSERT,UPDATE,REPLACE,REMOVE,UPSERT)本身,而仅仅限制了这些操作返回结果的数量。即使指定了LIMIT 2,依然会创建五个文档,LIMIT操作只是将查询(通过RETURN语句)返回的文档数量限制为前两个:
FOR i IN 1..5
INSERT { value: i } INTO coll
LIMIT 2
RETURN NEW