当我们有双向关系

时间:2016-04-13 10:44:35

标签: neo4j cypher neo4j-cql

对这个问题的延伸Neo4j - Get Level2 or Level3 connections

我在Neo4j中有以下关系。很少有节点具有双向关系

enter image description here

我想获取给定用户的二级或三级连接。

我有以下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

因此,当我查询获得Level2连接时,我应该只明白这些user7到User14

3 个答案:

答案 0 :(得分:1)

这就是我只能获取二级连接的密码查询:

CQL-1:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<a href="secondpage.html" class="adding">
  <div>ADD</div>
</a>

<iframe src="" name="someFrame" id="someFrame" width="400" height="200"></iframe>

CQL-2

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

答案 1 :(得分:0)

这些行中的某些内容是否会返回您期望的节点?

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

答案 2 :(得分:0)

此查询可能符合您的需求:

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