Соединения уровня 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