2016-09-30 6 views
1

Graph I am trying to parseNeo4j Cypher Abfrage alle Unterknoten zu erhalten, bis ein Knoten mit einer bestimmten Beziehung zu erreichen

Ich versuche, eine Abfrage erstellen, in dem beginnt mit den blauen Knoten „Analytical Einheiten“ genannt. Die Abfrage erhält alle Unterknoten, es sei denn, sie läuft auf einen Knoten, der die Beziehung "außer Kraft setzt", indem sie direkt an eine andere analytische Einheit angehängt wird. Jede Hilfe wäre willkommen!

+1

Können Sie auf diese erweitern? Gehen Sie in dem Diagramm, mit dem Sie verbunden sind, durch die Operationen, die Sie für eine korrekte Abfrage erwarten, und für die erwartete Ausgabe. – InverseFalcon

+0

Beiseite: Sie scheinen Beziehungstypen zu haben, die eine entgegengesetzte Direktionalität haben, aber immer zwischen denselben Knoten existieren. Diese Redundanz ist in neo4j nicht notwendig, da Sie problemlos in jeder Richtung navigieren können. – cybersam

+0

@InverseFalcon Sure, also sagen wir mal, dass ich mit einem Startknoten von "Bank of America" ​​abgefragt habe ... einen der blauen Knoten ... Ich möchte alles damit verbunden in rot eingekettelt bekommen. Die Idee dahinter ist, dass alles darunter die Beziehung "Analytically A Part Of" "ererbt", wenn sie nicht in einen Knoten läuft, der diese Beziehung explizit definiert. Ich bin mir nicht sicher, ob es vielleicht die beste Methode ist, jedem Knoten diese explizite Beziehung zu geben. – patrickb19

Antwort

1

Funktioniert diese Abfrage für Sie?

Es sollte jeden Blue Knoten (der einen Pfad zu einem beliebigen Red Knoten hat) und seine "Unterknoten" (entlang jedem dieser Pfade) zurückgeben, wobei Pfade ignoriert werden, in denen jeder Unterknoten (außer dem ersten) ein hat ankommende ANALYTICALLY_COMPOSED Beziehung:

MATCH (a:Blue)-[:ANALYTICALLY_COMPOSED]->(b) 
MATCH p=(b)-[rels*]-(:Red) 
WITH a, NODES(p) AS subnodes 
WHERE NONE(n IN subnodes[1..] WHERE()-[:ANALYTICALLY_COMPOSED]->(n)) 
RETURN a, subnodes; 
+0

Ja, das hat den Trick !! Vielen Dank! ... musste nur filtern, wo "a.name =" Bank of America "zu den roten angezeigt wurde, weil es aus dem anderen Pfad kam. – patrickb19

Verwandte Themen