【发布时间】:2014-07-23 12:56:01
【问题描述】:
有没有办法使用 Cypher 在 Neo4j 中创建双向关系?我希望关系是双向的,而不是在两个方向上建立两个单向关系例如:
(A)<-[FRIEND]->(B)
而不是:
(A)-[FRIEND]->(B)
(A)<-[FRIEND]-(B)
提前致谢:)
【问题讨论】:
标签: neo4j cypher relationship bidirectional-relation
有没有办法使用 Cypher 在 Neo4j 中创建双向关系?我希望关系是双向的,而不是在两个方向上建立两个单向关系例如:
(A)<-[FRIEND]->(B)
而不是:
(A)-[FRIEND]->(B)
(A)<-[FRIEND]-(B)
提前致谢:)
【问题讨论】:
标签: neo4j cypher relationship bidirectional-relation
不,没有。 neo4j 中的所有关系都有一个方向,从给定节点开始和结束。
有少量解决方法。
首先,正如您所建议的,我们可以有两种关系,一种从 A 到 B,另一种从 B 到 A。
或者,在编写 MATCH 查询时,我们可以指定无方向匹配模式,通过使用诸如
之类的查询MATCH (A)-[FRIEND]-(B) RETURN A, B
它不会关心A和B是朋友还是相反,并且允许我们在建立关系时任意选择一个方向。
【讨论】:
CREATE 没有方向的关系。这是有道理的,因为在没有指定方向的情况下随机决定方向是错误的。
根据这篇文章:Modeling Data in Neo4j: Bidirectional Relationships
严格来说更好的选择是在任意方向上创建关系并且在查询时不指定方向:
MATCH (neo)-[:PARTNER]-(partner)
引擎能够沿任一方向穿越边缘。创建反方向边缘是不必要的,只会浪费空间和遍历时间。
【讨论】: