LIMIT
LIMIT
constrains the number of returned rows.
LIMIT
accepts any expression that evaluates to a positive INTEGER
and does not refer to nodes or relationships.
Neo4j does not guarantee the results generated by LIMIT .
The only clause that guarantees a specific row order is ORDER BY .
|
Example graph
The following graph is used for the examples below:
To recreate it, run the following query against an empty Neo4j database:
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)
Examples
To return a limited subset of the rows, use this syntax:
MATCH (n)
RETURN n.name
ORDER BY n.name
LIMIT 3
Limit to 3 rows by the example query.
n.name |
---|
|
|
|
Rows: 3 |
LIMIT
to return a subset of the rowsLIMIT
accepts any expression that evaluates to a positive integer, as long as it can be statically calculated (i.e. calculated before the query is run).
MATCH (n)
RETURN n.name
ORDER BY n.name
LIMIT 1 + toInteger(3 * rand())
Limit 1 row plus randomly 0, 1, or 2. So randomly limit to 1, 2, or 3 rows.
n.name |
---|
|
|
|
Rows: 3 |
LIMIT
and side effects
The use of LIMIT
in a query will not stop side effects, like CREATE
, DELETE
, or SET
, from happening if the limit is in the same query part as the side effect.
CREATE (n)
RETURN n
LIMIT 0
This query returns nothing, but creates one node:
|
Rows: 0 |
MATCH (n {name: 'A'})
SET n.age = 60
RETURN n
LIMIT 0
This query returns nothing, but writes one property:
|
Rows: 0 |
If we want to limit the number of updates we can split the query using the WITH
clause:
MATCH (n)
WITH n ORDER BY n.name LIMIT 1
SET n.locked = true
RETURN n
Writes locked
property on one node and return that node:
n |
---|
|
Rows: 1 |
Using LIMIT
as a standalone clause
LIMIT
MATCH (n)
LIMIT 2
RETURN collect(n.name) AS names
names |
---|
|
|
The following query orders all nodes by name
descending, skips the two first rows and limits the results to two rows.
It then collects the results in a list.
LIMIT
used in conjunction with ORDER BY
and SKIP
MATCH (n)
ORDER BY n.name DESC
SKIP 2
LIMIT 2
RETURN collect(n.name) AS names
names |
---|
|
|