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

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

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

【问题讨论】:

    标签: neo4j graph-databases


    【解决方案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 的权重。

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

    【讨论】:

    • 这可能会奏效,但会牺牲查询的简单性...谢谢!
    • 如果您喜欢危险的生活,那么您也可以将其存储为浮点数。整数部分的入站重量,小数部分的出站重量。但这听起来像是会在某个时候惊人地崩溃。
    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多