Neo4j 不对称关系
Neo4j Asymetric Relationships
有没有办法在 Neo4j 中建立不对称关系?
根据路径在两个节点之间的遍历方向,需要有不同的成本。
执行此操作的首选方法是在相同的两个节点之间创建两条边,方向相反,每条边用 属性 表示成本。
从技术上讲,也可以在同一条边上创建两个属性,例如
(n:myLabel {name:'A'})-[r:MY_EDGE_TYPE {cost:'A,7,B,5'})->(m:myLabel {name:'B'})
但是开始看起来不太好 ;)。此外,您必须在路径上的总成本的任何成本计算中进行额外计算。
您可以根据您来自哪个方向来引用不同的属性,即:
(n1:Node)-[:EDGE {in: 5, out: 3}]->(n2:Node)
当您遍历从 n1
到 n2
的关系时,您将引用 out
以获得权重 3,而当您从 n2
开始时对于 n1
,您将引用 in
以获得权重 5。
这对我来说似乎是一种反模式,因为您必须跟踪方向。如果可能的话,我会选择两种关系与一种 属性。
有没有办法在 Neo4j 中建立不对称关系?
根据路径在两个节点之间的遍历方向,需要有不同的成本。
执行此操作的首选方法是在相同的两个节点之间创建两条边,方向相反,每条边用 属性 表示成本。
从技术上讲,也可以在同一条边上创建两个属性,例如
(n:myLabel {name:'A'})-[r:MY_EDGE_TYPE {cost:'A,7,B,5'})->(m:myLabel {name:'B'})
但是开始看起来不太好 ;)。此外,您必须在路径上的总成本的任何成本计算中进行额外计算。
您可以根据您来自哪个方向来引用不同的属性,即:
(n1:Node)-[:EDGE {in: 5, out: 3}]->(n2:Node)
当您遍历从 n1
到 n2
的关系时,您将引用 out
以获得权重 3,而当您从 n2
开始时对于 n1
,您将引用 in
以获得权重 5。
这对我来说似乎是一种反模式,因为您必须跟踪方向。如果可能的话,我会选择两种关系与一种 属性。