Every query describes a pattern, and in that pattern one can have multiple starting points. A starting point is a relationship or a node where a pattern is anchored. You can either introduce starting points by id, or by index lookups. Note that trying to use an index that doesn’t exist will throw an exception.
Binding a node as a starting point is done with the node(*)
function.
Note | |
---|---|
Neo4j reuses its internal ids when nodes and relationships are deleted, which means it’s bad practice to refer to them this way. Instead, use application generated ids. |
Query.
START n=node(1) RETURN n
The corresponding node is returned.
Try this query live. (1) {"name":"A"} (2) {"name":"B"} (3) {"name":"C"} (1)-[:KNOWS]->(2) {} (1)-[:KNOWS]->(3) {} start n=node(1) return n
Binding a relationship as a starting point is done with the relationship(*)
function, which can also be abbreviated rel(*)
. See Section 12.1.1, “Node by id” for more information on Neo4j ids.
Query.
START r=relationship(0) RETURN r
The relationship with id 0
is returned.
Try this query live. (1) {"name":"A"} (2) {"name":"B"} (3) {"name":"C"} (1)-[:KNOWS]->(2) {} (1)-[:KNOWS]->(3) {} start r=relationship(0) return r
Multiple nodes are selected by listing them separated by commas.
Query.
START n=node(1, 2, 3) RETURN n
This returns the nodes listed in the START
statement.
Try this query live. (1) {"name":"A"} (2) {"name":"B"} (3) {"name":"C"} (1)-[:KNOWS]->(2) {} (1)-[:KNOWS]->(3) {} start n=node(1, 2, 3) return n
To get all the nodes, use an asterisk. This can be done with relationships as well.
Query.
START n=node(*) RETURN n
This query returns all the nodes in the graph.
Try this query live. (1) {"name":"A"} (2) {"name":"B"} (3) {"name":"C"} (1)-[:KNOWS]->(2) {} (1)-[:KNOWS]->(3) {} start n=node(*) return n
When the starting point can be found by using index lookups, it can be done like this: node:index-name(key = "value")
. In this example, there exists a node index named nodes
.
Query.
START n=node:nodes(name = "A") RETURN n
The query returns the node indexed with the name "A
".
When the starting point can be found by using index lookups, it can be done like this: relationship:index-name(key = "value")
.
Query.
START r=relationship:rels(name = "Andrés") RETURN r
The relationship indexed with the name
property set to "Andrés
" is returned by the query.
When the starting point can be found by more complex Lucene queries, this is the syntax to use: node:index-name("query")
.This allows you to write more advanced index queries.
Query.
START n=node:nodes("name:A") RETURN n
The node indexed with name "A" is returned by the query.
Sometimes you want to bind multiple starting points. Just list them separated by commas.
Query.
START a=node(1), b=node(2) RETURN a,b
Both the nodes A
and the B
are returned.
Try this query live. (1) {"name":"A"} (2) {"name":"B"} (3) {"name":"C"} (1)-[:KNOWS]->(2) {} (1)-[:KNOWS]->(3) {} start a=node(1), b=node(2) return a,b
Copyright © 2013 Neo Technology