Neo4j 不对称关系

Posted

技术标签:

【中文标题】Neo4j 不对称关系【英文标题】:Neo4j Asymetric Relationships 【发布时间】:2022-01-06 10:43:42 【问题描述】:

有没有办法在 Neo4j 中建立不对称关系?

需要有不同的成本,具体取决于路径在两个节点之间遍历的方向。

【问题讨论】:

【参考方案1】:

这样做的首选方法是在相同的两个节点之间创建两条相反方向的边,每条边都有一个代表成本的属性。

从技术上讲,也可以在同一条边上创建两个属性,例如

(n:myLabel name:'A')-[r:MY_EDGE_TYPE cost:'A,7,B,5')->(m:myLabel name:'B')

但是从 ;) 开始看起来并不好。此外,您必须在路径上的总成本的任何成本计算中进行额外的计算。

【讨论】:

我开始倾向于类似的解决方案...感谢您确认它是有道理的!【参考方案2】:

您可以根据来自的方向引用不同的属性,即:

(n1:Node)-[:EDGE in: 5, out: 3]->(n2:Node)

当您遍历从n1n2 的关系时,您将引用out 以获得权​​重3,当您从n2 转到n1 时,您将引用in得到 5 的权重。

这对我来说似乎是一种反模式,因为您必须跟踪方向。如果可能的话,我会选择与一个属性的两个关系。

【讨论】:

这可能会奏效,但会牺牲查询的简单性...谢谢! 如果您喜欢危险的生活,那么您也可以将其存储为浮点数。整数部分的入站重量,小数部分的出站重量。但这听起来像是会在某个时候惊人地崩溃。

以上是关于Neo4j 不对称关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Neo4j 中隐藏节点之间不需要的关系

neo4j cypher - 麻烦制造关系

获取每个关系neo4j的路径长度

Neo4j的特点

neo4j-高效的原因(节点关系属性存储)

neo4j,密码关系存在,关系属性存在于where,order by和limit