Cypher根据特定关系连接匹配的节点

时间:2019-02-22 08:26:40

标签: neo4j cypher

如果我这样做:

MATCH (x:NODE {x.name: "Node1"})-[r:REL1]-(y:NODE) return x,r,y

然后我如何在REL1x节点集中找到所有的y关系?

编辑:

基于答案,我认为问题不清楚。

示例图:

create (:T1 {name:1}), (:T1 {name:2}), (:T1 {name:3}), (:T1 {name:4}), (:T1 {name:5}), (:T1 {name:6}), (:T1 {name:7})
match (a:T1 {name:1}), (b:T1 {name:2}) create (a)-[r:REL1]->(b)
match (a:T1 {name:1}), (b:T1 {name:3}) create (a)-[r:REL1]->(b)
match (a:T1 {name:5}), (b:T1 {name:4}) create (a)-[r:REL1]->(b)
match (a:T1 {name:5}), (b:T1 {name:3}) create (a)-[r:REL1]->(b)
match (a:T1 {name:5}), (b:T1 {name:2}) create (a)-[r:REL1]->(b)
match (a:T1 {name:5}), (b:T1 {name:1}) create (a)-[r:REL1]->(b)
match (a:T1 {name:7}), (b:T1 {name:6}) create (a)-[r:REL2]->(b)
match (a:T1 {name:7}), (b:T1 {name:5}) create (a)-[r:REL2]->(b)
match (a:T1 {name:7}), (b:T1 {name:4}) create (a)-[r:REL2]->(b)
match (a:T1 {name:7}), (b:T1 {name:3}) create (a)-[r:REL2]->(b)

我将查找与节点REL1name:5关系的所有内容。我还想在返回的节点之间找到所有的REL1关系。

所以我应该得到

5->4
5->3
5->2
5->1
1->2
1->3

但不是

7->5
7->4
7->3

因为它们是REL2关系。

所以我想我可以这样:

match (a:T1 {name: 5})-[b:REL1]->(c:T1) return a,b,c
union match (a:T1)-[b:REL1]-(c:T1) return a,b,c

但是问题是我正在使用的图形非常大,因此效率似乎很低。我希望能够

  1. 选择一组节点(所有连接到5的节点)
  2. 找到这些节点之间的所有连接

3 个答案:

答案 0 :(得分:0)

如果需要找出x和y节点集中的所有REL1关系,则从x节点中删除条件。

MATCH (x:NODE)-[r:REL1]-(y:User) return x,r,y

答案 1 :(得分:0)

我们正确地使用双向,以两种方式找到该关系,但是当您尝试查找所有关系时,您仅选择一个关系REL1,从关系[]中删除标签,因此可以使用以下方法查询并返回*,它将返回所有使用的变量。

MATCH (x:NODE {x.name: "Node1"})-[r]-(y:NODE) return *

答案 2 :(得分:0)

要获得通过一个或多个REL1关系连接的所有不同节点对,只需执行以下操作:

MATCH (a:T1)-[:REL1]->(c:T1)
RETURN DISTINCT a, c

结果将是:

╒══════════╤══════════╕
│"a"       │"c"       │
╞══════════╪══════════╡
│{"name":1}│{"name":2}│
├──────────┼──────────┤
│{"name":1}│{"name":3}│
├──────────┼──────────┤
│{"name":5}│{"name":1}│
├──────────┼──────────┤
│{"name":5}│{"name":2}│
├──────────┼──────────┤
│{"name":5}│{"name":3}│
├──────────┼──────────┤
│{"name":5}│{"name":4}│
└──────────┴──────────┘

如果您还想要每对之间的关​​系,则可以执行以下操作:

MATCH (a:T1)-[r:REL1]->(c:T1)
RETURN a, c, COLLECT(r) AS rels