LIMIT

LIMIT 限制返回行的数量。

LIMIT 接受任何计算结果为正 INTEGER 的表达式,并且不引用节点或关系。

Neo4j 不保证 LIMIT 生成的结果。唯一保证特定行顺序的子句是 ORDER BY.

示例图

以下图用于下面的示例

graph limit clause

要重新创建它,请对空的 Neo4j 数据库运行以下查询

CREATE
  (andy: Person {name: 'Andy'}),
  (bernard: Person {name: 'Bernard'}),
  (charlotte: Person {name: 'Charlotte'}),
  (david: Person {name: 'David'}),
  (erika: Person {name: 'Erika'}),
  (andy)-[:KNOWS]->(bernard),
  (andy)-[:KNOWS]->(charlotte),
  (andy)-[:KNOWS]->(david),
  (andy)-[:KNOWS]->(erika)

示例

示例 1. 返回行的有限子集

要返回行的有限子集,请使用以下语法

查询
MATCH (n)
RETURN n.name
ORDER BY n.name
LIMIT 3

通过示例查询将结果限制为 3 行。

表 1. 结果
n.name

"Andy"

"Bernard"

"Charlotte"

行数:3

示例 2. 使用带有 LIMIT 的表达式来返回行的子集

LIMIT 接受任何计算结果为正整数的表达式,只要它可以静态计算(即在运行查询之前计算)。

查询
MATCH (n)
RETURN n.name
ORDER BY n.name
LIMIT 1 + toInteger(3 * rand())

限制 1 行加上随机 0、1 或 2。所以随机限制为 1、2 或 3 行。

表 2. 结果
n.name

"Andy"

"Bernard"

"Charlotte"

行数:3

LIMIT 和副作用

在查询中使用 LIMIT 不会阻止副作用(如 CREATEDELETESET)发生,如果限制在与副作用相同的查询部分中。

查询
CREATE (n)
RETURN n
LIMIT 0

此查询不返回任何内容,但会创建一个节点

表 3. 结果

(空结果)

行数:0
创建的节点数:1

查询
MATCH (n {name: 'A'})
SET n.age = 60
RETURN n
LIMIT 0

此查询不返回任何内容,但会写入一个属性

表 4. 结果

(空结果)

行数:0
设置的属性数:1

如果我们想限制更新次数,我们可以使用 WITH 子句拆分查询

查询
MATCH (n)
WITH n ORDER BY n.name LIMIT 1
SET n.locked = true
RETURN n

在单个节点上写入 locked 属性并返回该节点

表 5. 结果
n

{locked:true,name:"Andy",age:60}

行数:1
设置的属性数:1

LIMIT 用作独立子句

LIMIT 可以用作独立子句,也可以与 ORDER BYSKIP/OFFSET 结合使用。

LIMIT 的独立使用
MATCH (n)
LIMIT 2
RETURN collect(n.name) AS names
表 6. 结果
names

["Andy", "Bernard"]

行数:1

以下查询按 name 降序对所有节点进行排序,跳过前两行并将结果限制为两行。然后,它 收集 结果到列表中。

ORDER BYSKIP 结合使用的 LIMIT
MATCH (n)
ORDER BY n.name DESC
SKIP 2
LIMIT 2
RETURN collect(n.name) AS names
表 7. 结果
names

["David", "Charlotte"]

行数:1