【问题标题】:Neo4j- Avoid multiple relationships getting created between the same nodes in cypher?Neo4j-避免在密码中的相同节点之间创建多个关系?
【发布时间】:2016-01-15 15:40:38
【问题描述】:

如果已经在现有节点之间创建了关系,我想限制创建关系。现在它被创建了多次?是否有任何类似于“合并”的命令来限制重复关系?感谢您的任何建议

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    在创建关系时使用 MERGE 而不是 CREATE。

    MERGE (Product)-[:listed_under_category]->(level3)
    MERGE (level3)-[:child_of]->(level2)
    

    【讨论】:

      【解决方案2】:

      嘿,我认为混淆了,但我需要更多信息。就是合并,合并整个语句。因此,如果他没有为整个语句找到“匹配”,则数据库“创建”整个语句。

      所以当你输入类似 merge (a)-[]->(b)-[]->(q) 如果你已经有 (a)-[]->(b)

      他将重新创建 (a)-[]->(b)-[]->(q) 并且您在数据库中有 (a)-[]->(b)-[]->(q) , (a)-[]->(b)

      但是如果你输入merge (a)-[]->(b) merge(b)-[]->(q)

      你知道你有节点。如果没有关系,Neo4j 合并将创建关系。如果有关系则匹配

      【讨论】:

        【解决方案3】:

        如果我理解您的问题,CREATE UNIQUE 可能是您正在寻找的解决方案。例如:

        create (a:Ex {name: 'A'})-[r:inside]->(b:Ex {name: 'B'}) return a, b, r
        

        建立你原来的 (a)-[]->(b) 关系。然后以您提出的方式扩展关系....

        match (a)-[:inside]->(b) where a.name = 'A' and b.name = 'B'
        create unique (a)-[:inside]->(b)-[:inside]->(q:Ex {name: 'Q'})
        return a, b, q
        

        如果关系不同,CREATE UNIQUE 也可以:

        match (a)-[:inside]->(b) where a.name = 'A' and b.name = 'B'
        create unique (a)-[:inside]->(b)-[:under]->(q:Ex {name: 'Q'})
        return a, b, q
        

        【讨论】:

          【解决方案4】:

          MERGE 子句还可以避免重复关系。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-12
            相关资源
            最近更新 更多