Соединения уровня 2 или уровня 3, когда у нас есть двусторонние отношения

Продолжение этого вопроса Neo4j - Получите соединения Level2 или Level3

У меня есть следующие отношения в Neo4j. Немногие узлы имеют двунаправленные отношения

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

У меня есть следующий CQL

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

этот дает мне все узлы, которые имеют отношения с User1 и дает даже User1 на выходе

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

РЕДАКТИРОВАТЬ:

Для User1 соединения на отдельных уровнях следующие:

Level-1 => User2, User3, User4, User5, User6
Level-2 => User7, User8, User9, User10, User11, User12, User13, User14

Поэтому, когда я запрашиваю соединения уровня 2, я должен четко получить только эти user7 to User14

3 ответа

Решение

Это то, что запрос шифра я должен получить только два уровня соединения:

CQL-1:

MATCH path=(user1:User)-[:KNOWS]->(:User)-[:KNOWS]->(user2:User) 
WHERE user1.mobile = 9000090001 AND user1 <> user2 AND NOT (user1)-[:KNOWS]->(user2)
RETURN distinct user2
ORDER BY user2.mobile

CQL-2

MATCH path=(user1:User)-[knows:KNOWS*2..2]->(user2:User)
WHERE user1.mobile = 9000090001 AND user1 <> user2 AND NOT (user1)-[:KNOWS]->(user2)
RETURN distinct user2
ORDER BY user2.mobile

Этот запрос может удовлетворить ваши потребности:

MATCH path=(user1:User)-[knows:KNOWS*2..3]->(user2:User) 
WHERE user1.mobile = 9000090001 AND user1 <> user2 
RETURN user1, COLLECT(DISTINCT user2), length(path) as downlevel 
ORDER BY downlevel;

Возвращает строку для каждого downlevelи каждая строка имеет коллекцию отдельных узлов на этом уровне. Это также опускает user1 из коллекций.

Что-то в этом направлении возвращает ожидаемые вами узлы?

MATCH path=(user1:User)-[knows:KNOWS*2..3]-(user2:User)
WHERE user1.name = 'User1'
AND user1 <> user2
RETURN user2, collect(length(path)) as downlevels, min(length(path)) as min_length
ORDER BY min_length
Другие вопросы по тегам