8.9. Collections
Cypher has good support for collections.
Collections in general
A literal collection is created by using brackets and separating the elements in the collection with commas.
Query.
RETURN [0,1,2,3,4,5,6,7,8,9] AS collection
Result
collection |
---|
1 row |
|
Try this query live. none RETURN [0,1,2,3,4,5,6,7,8,9] AS collection
In our examples, we’ll use the range function. It gives you a collection containing all numbers between given start and end numbers. Range is inclusive in both ends.
To access individual elements in the collection, we use the square brackets again. This will extract from the start index and up to but not including the end index.
Query.
RETURN range(0,10)[3]
Result
range(0,10)[3] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[3]
You can also use negative numbers, to start from the end of the collection instead.
Query.
RETURN range(0,10)[-3]
Result
range(0,10)[-3] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[-3]
Finally, you can use ranges inside the brackets to return ranges of the collection.
Query.
RETURN range(0,10)[0..3]
Result
range(0,10)[0..3] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[0..3]
Query.
RETURN range(0,10)[0..-5]
Result
range(0,10)[0..-5] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[0..-5]
Query.
RETURN range(0,10)[-5..]
Result
range(0,10)[-5..] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[-5..]
Query.
RETURN range(0,10)[..4]
Result
range(0,10)[..4] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[..4]
Note Out-of-bound slices are simply truncated, but out-of-bound single elements return |
Query.
RETURN range(0,10)[15]
Result
range(0,10)[15] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[15]
Query.
RETURN range(0,10)[5..15]
Result
range(0,10)[5..15] |
---|
1 row |
|
Try this query live. none RETURN range(0,10)[5..15]
You can get the length of a collection like this:
Query.
RETURN length(range(0,10)[0..3])
Result
length(range(0,10)[0..3]) |
---|
1 row |
|
Try this query live. none RETURN length(range(0,10)[0..3])
List comprehension
List comprehension is a syntactic construct available in Cypher for creating a collection based on existing collections. It follows the form of the mathematical set-builder notation (set comprehension) instead of the use of map and filter functions.
Query.
RETURN [x IN range(0,10) WHERE x % 2 = 0 | x^3] AS result
Result
result |
---|
1 row |
|
Try this query live. none RETURN [x IN range(0,10) WHERE x % 2 = 0 | x^3] AS result
Either the WHERE
part, or the expression, can be omitted, if you only want to filter or map respectively.
Query.
RETURN [x IN range(0,10) WHERE x % 2 = 0] AS result
Result
result |
---|
1 row |
|
Try this query live. none RETURN [x IN range(0,10) WHERE x % 2 = 0] AS result
Query.
RETURN [x IN range(0,10)| x^3] AS result
Result
result |
---|
1 row |
|
Try this query live. none RETURN [x IN range(0,10)| x^3] AS result
Literal maps
From Cypher, you can also construct maps. Through REST you will get JSON objects; in Java they will be java.util.Map<String,Object>
.
Query.
RETURN { key : "Value", collectionKey: [{ inner: "Map1" }, { inner: "Map2" }]}
Result
{ key : "Value", collectionKey: [ { inner: "Map1" }, { inner: "Map2" } ] } |
---|
1 row |
|
Try this query live. none RETURN { key : "Value", collectionKey: [{ inner: "Map1" }, { inner: "Map2" }]}