【问题标题】:Neo4j how to create multiple relationship with single Node?Neo4j 如何与单个节点创建多个关系?
【发布时间】:2019-11-08 15:45:00
【问题描述】:

现在我正在使用以下 Cypher 查询创建一对一关系

@Query("MATCH (R:`User`{uuid:{uuid}}), (L:`Role`{uuid:{roleUuid}}) CREATE (R)-[r:`FILTER_ON`]->(L);")

现在我的问题是我有多个roleUuid,例如roleUuid1roleUuid2roleUuid3 等,现在我想用多个roleUuid 与用户(uuid)建立关系

如何在 Cypher 查询中完成?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    使用包含角色 UUID 列表的参数roleUuids,您可以发出

    MATCH (R:`User`{uuid:{uuid}}), (L:`Role`)
    WHERE L.uuid IN {roleUuids}
    CREATE (R)-[r:`FILTER_ON`]->(L)
    

    或者如果您在 uuid 属性上有索引:

    UNWIND {roleUuids} AS roleUuid
    MATCH (R:`User`{uuid:{uuid}}), (L:`Role`{uuid:roleUuid})
    CREATE (R)-[r:`FILTER_ON`]->(L)
    

    备注:如果您使用的是最新的 Neo4j 版本,我建议使用 $parameter 语法而不是 {parameter} 语法以提高可读性。

    【讨论】:

    • 如果我们可以使用IN,为什么要使用Index
    • 如果您创建了索引,第二个变体的性能会明显更好。根据您的数据库的大小,这可能不会有太大的区别 - 如果您只有几千个节点,那么普通(无索引)数据库可以正常工作。
    • SO `IN' 会一次性与 Single Node 建立多个关系对吗?
    • 在我的情况下roleUuid 是一个列表,因此它不应该产生任何问题。
    • "SO `IN' 将一次性与 Single Node 建立多个关系,对吗?"答案中的两个解决方案是相同的。两者都将使用单个查询创建多个关系。
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多