问题
I'm developing a small connections structure to understand the concept of graph databases better, as well learn Neo4J
I have few users and the relationship between them is KNOWS as follows
I have the following cqls to create the nodes and relationships between then in Neo4j.
CREATE (user1:User {name:"User1",mail:"user1@test.com",mobile: 9000090001})
CREATE (user2:User {name:"User2",mail:"user2@test.com",mobile: 9000090002})
CREATE (user3:User {name:"User3",mail:"user3@test.com",mobile: 9000090003})
CREATE (user4:User {name:"User4",mail:"user4@test.com",mobile: 9000090004})
CREATE (user5:User {name:"User5",mail:"user5@test.com",mobile: 9000090005})
CREATE (user6:User {name:"User6",mail:"user6@test.com",mobile: 9000090006})
CREATE (user7:User {name:"User7",mail:"user7@test.com",mobile: 9000090007})
CREATE (user8:User {name:"User8",mail:"user8@test.com",mobile: 9000090008})
CREATE (user9:User {name:"User9",mail:"user9@test.com",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
Now I want to fetch level-2 or level-3 connections for the given user.
For example:
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
I have the following 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
this one is giving me all the direct or indirect connections that User1 has. Can anyone point me what should be my cql to fulfill this
回答1:
You can modify this
MATCH path=(user1:User)-[knows:KNOWS*1..]->(user2:User)
To get second level it should be like
MATCH path=(user1:User)-[knows:KNOWS*2..2]->(user2:User)
To get third level it should be like
MATCH path=(user1:User)-[knows:KNOWS*3..3]->(user2:User)
来源:https://stackoverflow.com/questions/36569336/neo4j-get-level2-or-level3-connections