Neo4j - Получить соединения уровня 2 или уровня 3

Я разрабатываю небольшую структуру соединений для лучшего понимания концепции графовых баз данных, а также изучаю Neo4J

У меня мало пользователей, и отношения между ними ЗНАЮТ следующим образом

введите описание изображения здесь

У меня есть следующие cqls для создания узлов и отношений между ними в 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

Теперь я хочу получить соединения уровня 2 или уровня 3 для данного пользователя.

Например:

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

У меня есть следующий 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

этот дает мне все прямые или косвенные связи, которые есть у User1. Может кто-нибудь указать мне, что должно быть моим CQL для выполнения этого

1 ответ

Решение

Вы можете изменить это

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

Чтобы получить второй уровень это должно быть как

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

Чтобы получить третий уровень это должно быть как

 MATCH path=(user1:User)-[knows:KNOWS*3..3]->(user2:User)
Другие вопросы по тегам