首页 > 解决方案 > Neo4j,Cypher 以节点之间不存在的关系返回结果

问题描述

我想表示一个人可能认识一个的图表路径,如果他们有相同的朋友。当我运行这个查询时,我在表格模式下得到了我想要的结果。

MATCH (p1:Person)-[:IS_FRIEND_OF]->(any:Person)
MATCH (p2:Person)-[:IS_FRIEND_OF]->(any)
WHERE NOT p1 = p2
RETURN p1, p2

我的问题是我想将它们表示为图形,连接 person1 和 person2 的关系将其重命名为“ MAY_KNOWS

标签: neo4jcypher

解决方案


您可以virtual relationships在 APOC 中使用:

MATCH (n:Person)-[r:IS_FRIEND_OF]->(other)  
MATCH (other)-[:IS_FRIEND_OF]->(candidate)
WHERE NOT (n)-[:IS_FRIEND_OF]->(candidate)   
RETURN n, other, candidate, apoc.create.vRelationship(n, 'MAY_KNOW', {}, candidate)

参考:https ://neo4j-contrib.github.io/neo4j-apoc-procedures/#_virtual_nodes_rels

在此处输入图像描述


推荐阅读