有没有办法使用 Cypher 在 Neo4j 中创建双向关系?我希望这种关系是双向的,而不是在两个方向上建立两个单向关系例如:
(A)<-[FRIEND]->(B)
而不是:
(A)-[FRIEND]->(B)
(A)<-[FRIEND]-(B)
提前致谢 :)
有没有办法使用 Cypher 在 Neo4j 中创建双向关系?我希望这种关系是双向的,而不是在两个方向上建立两个单向关系例如:
(A)<-[FRIEND]->(B)
而不是:
(A)-[FRIEND]->(B)
(A)<-[FRIEND]-(B)
提前致谢 :)
不,没有。neo4j 中的所有关系都有一个方向,从给定节点开始和结束。
有少量的解决方法。
首先,正如您所建议的,我们可以有两种关系,一种从 A 到 B,另一种从 B 到 A。
或者,在编写 MATCH 查询时,我们可以指定无方向匹配模式,方法是使用查询,例如
MATCH (A)-[FRIEND]-(B) RETURN A, B
它不会关心 A 与 B 是否是朋友,反之亦然,并允许我们在建立关系时任意选择一个方向。
根据这篇文章:在 Neo4j 中建模数据:双向关系
更好的选择是在任意方向上创建关系,并且在查询时不指定方向:
MATCH (neo)-[:PARTNER]-(partner)
引擎能够在任一方向穿越边缘。创建反方向边缘是不必要的,只会浪费空间和遍历时间。