2016-12-17 1 views
0

Ich versuche, einen einzelnen Knoten mit quetscht auf sie zeigen zu schaffen, unter aus dem Abfrageergebnis kommen:Wie ein einzigartiges Knoten aus dem Ergebnis einer Abfrage in Cypher Sprache erstellen

MATCH (e:EXP)-[s:Was_selected]-> 
     (g:GNE)-[p:Has_interaction]-(h:GNE)- 
     [:Was_clusterized]-(c:CLUSTER)- 
     [:Was_represented]-(b:BP) 
WHERE p.combined_score > 800 
WITH DISTINCT g, COUNT(distinct h) AS score WHERE score > 50 
CREATE (g)-[:AS_HUBS]->(HUBS) 
RETURN g 

Aber das Ergebnis ist ein Knoten von Typ HUBs für jedes g (GNE).

Danke für Hilfe.

Antwort

1

Sie sind Abfrage ist ziemlich komplex, also lassen Sie uns zum Experimentieren ein einfacheres Beispiel erstellen:

CREATE 
    (a1:A {name: 'a1'}), 
    (a2:A {name: 'a2'}) 

So erstellen Sie einen Hub zwischen den beiden Knoten, verwenden wir die folgende Abfrage:

MATCH (a:A) 
WITH collect(a) AS as 
CREATE (hub:Hub {name: 'hub'}) 
WITH as, hub 
UNWIND as AS a 
CREATE (hub)<-[:AS_HUBS]-(a) 
RETURN * 

Dies wird als einzelner Hub für alle A Knoten erstellt. Erklärung: Wir collect die Ergebnisse zu einer einzigen Zeile (in eine Liste), erstellen Sie eine einzige Hub, dann UNWIND die Zeile und erstellen Sie eine Beziehung für jeden Knoten A.

enter image description here

Wenn wir den Ansatz für Ihren Anwendungsfall anpassen, erhalten wir die folgende Abfrage:

MATCH (e:EXP)-[s:Was_selected]-> 
     (g:GNE)-[p:Has_interaction]-(h:GNE)- 
     [:Was_clusterized]-(c:CLUSTER)- 
     [:Was_represented]-(b:BP) 
WHERE p.combined_score > 800 
WITH DISTINCT g, COUNT(distinct h) AS score 
WHERE score > 50 
WITH collect(g) AS gs 
CREATE (hub:Hub {name: 'hub'}) 
WITH gs, hub 
UNWIND gs AS g 
CREATE (g)-[:AS_HUBS]->(hub) 
RETURN * 
Verwandte Themen