Neo4j匹配多个关系

时间:2020-04-17 06:58:56

标签: neo4j cypher

我需要一个MATCH,其中两种关系都是正确的。我了解(person1)-[:r1 |:r2]-(person2)。我遇到的问题是MATCH中的一个遍历另一个节点。 IE:

(p1:person)-[:FRIEND]-(p2:person)-[:FRIEND]-(p3:person)

所以我想要这种逻辑。我敌人的敌人是我的朋友。我的朋友是我的朋友。是我的朋友的所有名字的输出列表。我还将关系限制为特定值。

类似的东西:

MATCH (p1:Person)-[:ENEMY{type:'human'}]-(myEnemy:Person)-[enemy2:ENEMY{type:'human'}]-(myFriend:Person)
OR (p1:Person)-[friend:FRIEND{type:'human'}]-(myFriend:Person)
RETURN p1.name, myFriend.name

我需要一个列表,然后可以对其进行汇总。

这是我的第一篇文章。...所以,如果我的问题一团糟...用您的反馈打我,我会澄清一下:)

1 个答案:

答案 0 :(得分:0)

您可以使用UNION子句合并两个查询,并删除重复的结果:

<Pagination
  defaultCurrent={1}
  defaultPageSize={9}
  onChange={handleChange}
  total={mydata.length}
  //     ^ This was hard-coded
/>

进行MATCH (p:Person)-[:ENEMY{type:'human'}]-(:Person)-[:ENEMY{type:'human'}]-(f:Person) WHERE ID(p) < ID(f) RETURN p.name AS pName, f.name AS fName UNION MATCH (p:Person)-[:FRIEND{type:'human'}]-(f:Person) WHERE ID(p) < ID(f) RETURN p.name AS pName, f.name AS fName 过滤是为了避免将相同的一对ID(p) < ID(f)名称返回两次(以相反的顺序)。

[更新]

要获取每个Person有多少个朋友的计数,您可以利用新的CALL subquery语法(在neo4j 4.0中)来进行{{3} }:

Person