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

[0,1,2,3,4,5,6,7,8,9]

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

3

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

8

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

[0,1,2]

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

[0,1,2,3,4,5]

Try this query live none RETURN range(0,10)[0..-5]

Query 

RETURN range(0,10)[-5..]

Result

range(0,10)[-5..]
1 row

[6,7,8,9,10]

Try this query live none RETURN range(0,10)[-5..]

Query 

RETURN range(0,10)[..4]

Result

range(0,10)[..4]
1 row

[0,1,2,3]

Try this query live none RETURN range(0,10)[..4]

[Note]Note

Out-of-bound slices are simply truncated, but out-of-bound single elements return NULL.

Query 

RETURN range(0,10)[15]

Result

range(0,10)[15]
1 row

<null>

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

[5,6,7,8,9,10]

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

3

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

[0.0,8.0,64.0,216.0,512.0,1000.0]

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

[0,2,4,6,8,10]

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

[0.0,1.0,8.0,27.0,64.0,125.0,216.0,343.0,512.0,729.0,1000.0]

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

{key -> "Value", collectionKey -> [{inner -> "Map1"},{inner -> "Map2"}]}

Try this query live none RETURN { key : "Value", collectionKey: [{ inner: "Map1" }, { inner: "Map2" }]}