Question

I do not really understand what is the difference of collections from other type of output in Cypher. Can somebody explain this to me, please?

For instance the query

match (c:Context) where c.name="health" or c.name="opinion" return collect(c);

returns 1 row, while the query

match (c:Context) where c.name="health" or c.name="opinion" return c;

returns 6 rows (I have 6 nodes in my database that match the criteria).

This seems to be the only difference.

So then, is it just about the way the data is represented? Or is there some sort of advantage to use collections?

Thank you for your help!

Was it helpful?

Solution

Collections return the entities in an array, instead of an individual "row" for each result. The benefit of this is, for example: I want to get all addresses associated to a contact.

 Match (c:Contact)-[:AddressRelation]->(a:Address)
 return c,collect(a)

This would return a group of addresses for each contact, whereas without collect, it would return duplicate contact items (one for each address they have)

Collect returns something like this:

row = { name:"fred" } , [{address1},{address2},...]

Without collect:

row = { name:"fred"} , {address1}

row = { name:"fred"} , {address2}

...etc.

There are a lot of other things you can do, like return a property in an array, loop through each node in a foreach loop, etc.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top