2017-07-19 6 views
1

Meine Frage ist die folgende. Ich habe die folgenden Knoten Beziehung:Verstecken mittlere Knoten in Neo4j (Browser)

(Student)-[:StudiesIn]->(Class)<-[:Teaches]-(Professor) 

Ich versuche, auf dem Graph-Generator im Browser wie eine Abfrage anzuzeigen:

MATCH st=(a:Student)-[]-()-[]-(sir:Professor) RETURN st 

Welche gibt mir eine Beziehung, einschließlich der Klasse zurück. Jetzt interessiert mich die Klasse für diese spezielle Visualisierung nicht wirklich und ich möchte sie verstecken. Gibt es eine Möglichkeit, dies zu tun, ohne die Beziehung zwischen dem Studenten und dem Professor tatsächlich zu schaffen (und auf der Platte zu speichern)?

Ich würde wollen einfach nur so etwas wie:

MATCH (a:Student)-[]-()-[]-(sir:Professor) RETURN (a)-[{name:"HasAsProfessor"}]-(sir) 

Aber das funktioniert nicht. Ich habe betrachteten auch: http://grokbase.com/t/gg/neo4j/147evnv9j2/feature-request-virtual-relationships-in-result-sets, wo der Vorschlag wie folgt aussieht:

MATCH (a:Student)-[]-()-[]-(sir:Professor) RETURN {start:a, rel:"CustomRel", end:sir} 

Aber das hat nicht funktioniert im Browser (Und ich habe keine Zeit, um ein Graph Visualisierungstool von Grund auf neu zu implementieren)

Vielen Dank für Ihre Hilfe.

Antwort

2

Sie können versuchen, das Verfahren unter Verwendung von virtual relationships from the APOC library zu erstellen:

MATCH st=(S:Student)-[:StudiesIn]->(:Class)<-[:Teaches]-(P:Professor) 
WITH S, collect(distinct P) as PS 
UNWIND PS as P 
CALL apoc.create.vRelationship(S,'HasAsProfessor',{}, P) YIELD rel 
RETURN S, rel, P 

Upd: Zur Anzeige im neo4j-Browser eignet sich ein einfacher Trick, um die Beziehung zu erstellen und sofort zu löschen:

MATCH st=(S:Student)-[:StudiesIn]->(:Class)<-[:Teaches]-(P:Professor) 
WITH S, collect(distinct P) as PS 
UNWIND PS as P 
MERGE (S)-[r:VirtualRelationHasAsProfessor]->(P) 
DELETE r 
RETURN S, r, P 
+0

Vielen Dank! Gibt es keine Möglichkeit, dies ohne eine Bibliothek zu tun? Ich habe keinen Zugang zu GitHub an meinem Arbeitsplatz. – Myxoh

+0

@Myxoh Versuchen Sie update :) –

+0

Danke für die Hilfe! Ich dachte darüber nach, etwas zu erstellen und zu löschen (obwohl das eine schöner ist als das, an das ich gedacht hatte). – Myxoh

1

können Sie virtuelle Beziehungen verwenden, um von APOC Procedures, die nur für die Anzeige sind und nicht in der DB gespeichert:

MATCH (a:Student)-[*2]-(sir:Professor) 
RETURN a, sir, apoc.create.vRelationship(a,'HasAsProfessor',{}, sir) as rel 
+0

Vielen Dank! Gibt es keine Möglichkeit, dies ohne eine Bibliothek zu tun? Ich habe keinen Zugang zu GitHub an meinem Arbeitsplatz. – Myxoh

+0

@Myxoh Neo4j kann virtuelle Grafikelemente nicht nativ erstellen. APOC ist meines Wissens die beste Wahl. – InverseFalcon

+0

Danke. für die Hilfe! – Myxoh