2016-04-12 7 views
0

ich eine kleine Verbindungen Struktur bin der Entwicklung des Konzepts von Graph-Datenbanken besser zu verstehen, wie gut Neo4j lernenNeo4j - Get Level2 oder Level3 Verbindungen

Ich habe einige Benutzer und die Beziehung zwischen ihnen ist, weiß wie folgt

enter image description here

Ich habe die folgenden cqls, um die Knoten und Beziehungen zwischen dann in Neo4j zu erstellen.

CREATE (user1:User {name:"User1",mail:"[email protected]",mobile: 9000090001}) 
CREATE (user2:User {name:"User2",mail:"[email protected]",mobile: 9000090002}) 
CREATE (user3:User {name:"User3",mail:"[email protected]",mobile: 9000090003}) 
CREATE (user4:User {name:"User4",mail:"[email protected]",mobile: 9000090004}) 
CREATE (user5:User {name:"User5",mail:"[email protected]",mobile: 9000090005}) 
CREATE (user6:User {name:"User6",mail:"[email protected]",mobile: 9000090006}) 
CREATE (user7:User {name:"User7",mail:"[email protected]",mobile: 9000090007}) 
CREATE (user8:User {name:"User8",mail:"[email protected]",mobile: 9000090008}) 
CREATE (user9:User {name:"User9",mail:"[email protected]",mobile: 9000090009}) 

MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090001 AND user2.mobile = 9000090002 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090001 AND user2.mobile = 9000090003 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090002 AND user2.mobile = 9000090004 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090002 AND user2.mobile = 9000090005 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090003 AND user2.mobile = 9000090006 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090005 AND user2.mobile = 9000090007 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090005 AND user2.mobile = 9000090008 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090006 AND user2.mobile = 9000090009 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 

Jetzt möchte ich Level-2 oder Level-3-Verbindungen für den jeweiligen Benutzer holen.

Zum Beispiel:

If I ask for level-2 connections for User1 then I should get User4, User5, User6 
If I ask for level-3 connections for User1 then I should get User7, User8, User9 

Ich habe folgendes CQL

START levelGraph=node(1) 
MATCH path=(user1:User)-[knows:KNOWS*1..]->(user2:User) 
WHERE user1.mobile = 9000090001 
RETURN user1, user2, length(path) as downlevel 
ORDER BY length(path) asc 

dieses mir alle direkten oder indirekten Verbindungen schenkt, die User1 hat. Kann mir jemand zeigen, was meine cql diese

Antwort

0

erfüllen sollten Sie diese

MATCH path=(user1:User)-[knows:KNOWS*1..]->(user2:User) 
ändern

Zum zweiten Ebene erhalten es wie

MATCH path=(user1:User)-[knows:KNOWS*2..2]->(user2:User) 
sein sollte es wie

Um dritte Ebene zu erhalten sollten

MATCH path=(user1:User)-[knows:KNOWS*3..3]->(user2:User) 
+0

danke für die Eingabe, was ist, wenn ich bidirektionale Beziehungen habe, was wäre die Cql ändern, dass ich tun müssen? –

+0

Ich bin mir nicht sicher, ob ich verstehe, was du meinst. Vielleicht etwas wie MATCH Pfad = (Benutzer1: Benutzer) - [weiß: KNOWS * 2..2] - (Benutzer2: Benutzer) wird für Sie arbeiten – Evgen

+0

hier eine neue Frage http://StackOverflow.com/Questions/36596002/ Level-2-oder-Ebene-3-Verbindungen-wenn-wir-haben-bidirektionale Beziehung –

Verwandte Themen