Neo4j - Get Level2 or Level3 connections

风格不统一 提交于 2019-12-25 07:27:48

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!