2016-07-12 11 views
0

Ich brauche einige Daten von neo4j für Front-End-Visualisierungen zu lesen. Ich brauche 10 Knoten gleichzeitig und alle Beziehungen zwischen ihnen zu lesen. Ich habe einige Abfragen versucht, aber keine von ihnen funktioniert.Neo4j, wie zu Paginierung Knoten mit allen Beziehungen

match (p:Page{domain:"www.google.com"})-[r:LinkTo]-(:Page) 
with p,r skip 10 limit 10 
return collect(distinct p) as pages, collect(distinct r) as links; 

dieser würde mir 10 Knoten und 10 Beziehungen geben, aber die Anzahl der Beziehungen sind mehr als 10 zwischen diesen Knoten. Jede Hilfe wäre willkommen.

Antwort

1
// 1) Collect pages: 
match (P1:Page{domain:"www.google.com"})-[:LinkTo]-(P2:Page) 
with P1, P2 limit 10 
with collect(distinct P1) + collect(distinct P2) as tmp 
unwind tmp as p 
with collect(distinct p) as pages 

// 2) Then get a Cartesian product:  
unwind pages as P1 
    unwind pages as P2 
    optional match (P1)-[r:LinkTo]-(P2) 
RETURN pages, collect(distinct r) as links 

Wenn Sie benötigen genaue maximal 10 Knoten:

// 1) Collect pages: 
MATCH (P1:Page{domain:"www.google.com"})-[:LinkTo]-(P2:Page) 
WITH P1, P2 LIMIT 10 
WITH collect(distinct P1) + collect(distinct P2) as CP 
UNWIND CP as P 
WITH distinct P LIMIT 10 
WITH collect(P) as pages 

// 2) Then get a Cartesian product:  
unwind pages as P1 
    unwind pages as P2 
    optional match (P1)-[r:LinkTo]-(P2) 
RETURN pages, collect(distinct r) as links 
+0

Dank! Das ist sehr hilfreich! Es gibt mir alle Beziehungen. Aber es kann immer noch verbessert werden, die Abfrage gibt mir nicht wirklich genau 10 Knoten nach 'collect distinct nodes'. – ShaneX

+0

@ShaneX Ein Beispiel hinzugefügt, wie genau 10 Knoten erhalten werden. –

+0

Nochmals vielen Dank ~~: D @stdob – ShaneX