alexanoid
alexanoid

Reputation: 25770

Neo4j Cypher pattern comprehension as object property

I have a Decision node with a collection of Tag:

@NodeEntity
public class Decision {

    @Relationship(type = BELONGS_TO, direction = Relationship.OUTGOING)
    private Set<Tag> tags;

....

}

Based on the issue described at the following question SDN4/OGM Cypher query and duplicates at Result I have created the following query in order to select Decision + it's Tags:

MATCH (parentD)-[:CONTAINS]->(childD:Decision) 
WHERE parentD.id = {decisionId} 
WITH childD
SKIP 0 LIMIT 100 
RETURN childD AS decision, 
[ (childD)-[rdt:BELONGS_TO]->(t:Tag) | t ] AS tags

Is it possible to change the RETURN statement in order to place tags inside decision(as decision.tags) instead of having both of them at the same level ?

Upvotes: 1

Views: 201

Answers (1)

Michael Hunger
Michael Hunger

Reputation: 41676

Sure that's easy, it's then just not a node anymore, but a map.

MATCH (parentD:Decision)-[:CONTAINS]->(childD:Decision) 
WHERE parentD.id = {decisionId} 
WITH childD
SKIP 0 LIMIT 100 
RETURN childD {.*, tags: [ (childD)-[:BELONGS_TO]->(t:Tag) | t ] } AS decision

This uses map expressions, where you have a map constructed by:

variable { .property, .*, foo:"bar", bar:nested-expression } 

Upvotes: 1

Related Questions