2017-11-23 1 views
1

Ich habe ein Neo4j-Diagramm, das ungefähr so ​​aussieht: (person: Person) - [: actioned_in] -> (Film: Movie) - [: played_in] -> (Land: Land)Wie man einen Pfad mit neo4j cypher abgleicht und falls ein Teil davon nicht existiert, gebe den Rest zurück

ich mag würde den ganzen Weg mit dieser Abfrage entsprechen:

MATCH path = ((person:Person)-[:acted_in]->(movie:Movie)-[:played_in]->(country:Country)) RETURN NODES(path), RELATIONSHIPS(path) 

aber hier ist der schwierige Teil, ich mag auch fügen Sie eine Bedingung hinzu, die, wenn [:played_in] nicht existiert, nur den Teilpfad zurückgibt: (Person: Person) - [: Acte_in] -> (Film: Film)

Danke.

+1

In Ihrer Chiffre, alle diese Variablen gibt es keine Etiketten oder Beziehungstypen, und es ist nicht klar, welche diese Variablen gebunden an Graphelemente, die neu sind und dazu bestimmt sind, mit Graphelementen aus dieser Übereinstimmung abgeglichen zu werden. Es ist einfach genug, bis zu 2 Beziehungen mit Pfaden variabler Länge zu verbinden: 'MATCH path = (start) - [* .. 2] -> (end)', aber es ist nicht klar aus deiner Frage, ob dies das ist, was du brauchst, oder wenn Sie mit bestimmten Labels und Beziehungstypen arbeiten. Kannst du deine Frage klären? – InverseFalcon

+0

Hinzugefügt einige Etiketten hoffe, es macht die Frage ein wenig klarer. – Yuval

Antwort

2

Vielleicht nützlich sein für Sie so etwas wie die folgende Abfrage: vorher

MATCH path = (a)-[:b]->(c) 
OPTIONAL MATCH path2 =(c)-[:d]->(e) 
RETURN 
    NODES(path)+COALESCE (NODES(path2),[]), 
    RELATIONSHIPS(path)+COALESCE (RELATIONSHIPS(path2),[]) 
+0

Funktioniert gut! wusste nicht über COALESCE – Yuval

+0

Cool! Vergessen Sie jedoch nicht, über den @ inverseFalcon-Kommentar und den Pfad mit variabler Länge nachzudenken. – SylvainRoussy

Verwandte Themen