In the RETURN
part of your query, you define which parts of the pattern you are
interested in. It can be nodes, relationships, or properties on these.
To return a node, list it in the RETURN
statemenet.
Query.
START n=node(2) RETURN n
The example will return the node.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start n=node(2) return n
To return a relationship, just include it in the RETURN
list.
Query.
START n=node(1) MATCH (n)-[r:KNOWS]->(c) RETURN r
The relationship is returned by the example.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start n=node(1) match (n)-[r:KNOWS]->(c) return r
To return a property, use the dot separator, like this:
Query.
START n=node(1) RETURN n.name
The value of the property name
gets returned.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start n=node(1) return n.name
When you want to return all nodes, relationships and paths found in a query, you can use the *
symbol.
Query.
START a=node(1) MATCH p=a-[r]->b RETURN *
This returns the two nodes, the relationship and the path used in the query.
Result
b | a | r | p |
---|---|---|---|
2 rows | |||
|
|
|
|
|
|
|
|
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start a=node(1) match p=a-[r]->b return *
To introduce a placeholder that is made up of characters that are
outside of the english alphabet, you can use the `
to enclose the identifier, like this:
Query.
START `This isn't a common identifier`=node(1) RETURN `This isn't a common identifier`.happy
The node indexed with name "A" is returned
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start `This isn't a common identifier`=node(1) return `This isn't a common identifier`.happy
If the name of the column should be different from the expression used, you can rename it by using AS
<new name>.
Query.
START a=node(1) RETURN a.age AS SomethingTotallyDifferent
Returns the age property of a node, but renames the column.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start a=node(1) return a.age AS SomethingTotallyDifferent
If a property might or might not be there, you can select it optionally by adding a questionmark to the identifier, like this:
Query.
START n=node(1, 2) RETURN n.age?
This example returns the age when the node has that property, or null
if the property is not there.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start n=node(1, 2) return n.age?
Any expression can be used as a return iterm - literals, predicates, properties, functions, and everything else.
Query.
START a=node(1) RETURN a.age > 30, "I'm a literal", length(a-->())
Returns a predicate, a literal and function call with a pattern expression parameter.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start a=node(1) return a.age > 30, "I'm a literal", length(a-->())
DISTINCT
retrieves only unique rows depending on the columns that have been selected to output.
Query.
START a=node(1) MATCH (a)-->(b) RETURN distinct b
The node named B is returned by the query, but only once.
Try this query live. (1) {"age":55,"happy":"Yes!","name":"A"} (2) {"name":"B"} (1)-[:KNOWS]->(2) {} (1)-[:BLOCKS]->(2) {} start a=node(1) match (a)-->(b) return distinct b
Copyright © 2013 Neo Technology