如何将两个neo4j节点的数据重构为关系?

如何将两个neo4j节点的数据重构为关系?,neo4j,cypher,Neo4j,Cypher,我正在做一个使用图形数据库(neo4j)的实验。我将两个csv导入neo4j数据存储。我对近地天体的术语有点动摇;所以请原谅我。假设我有: 客户(账号、客户名称)和 CustomerGroup(AccountNumber,GroupName) 我想创建一个名为groups的新节点,它由CustomerGroups中不同的GroupName组成。我称之为团体 然后,我想使用CustomerGroups中的common AccountNumber在客户和集团之间创建“HAS_GROUP”关系 完成上

我正在做一个使用图形数据库(neo4j)的实验。我将两个csv导入neo4j数据存储。我对近地天体的术语有点动摇;所以请原谅我。假设我有:

客户(账号、客户名称)和 CustomerGroup(AccountNumber,GroupName)

  • 我想创建一个名为groups的新节点,它由CustomerGroups中不同的GroupName组成。我称之为团体

  • 然后,我想使用CustomerGroups中的common AccountNumber在客户和集团之间创建“HAS_GROUP”关系

  • 完成上述操作后,我可以删除CustomerGroup,因为它不再需要

  • 我只是被语法卡住了。我可以通过以下方式从CustomerGroup中获取不同的组:

    MATCH (n:CustomerGroups) distinct n.GROUP_NAME
    
    我得到了大约50个不同的组,但不知道如何将create语句添加到结果中并创建g:Group{GroupName:n.Group_NAME}

    然后我知道我的后续问题是如何使用带有公共帐号的旧表与新组进行匹配

    仅供参考:我已经为两个节点中的AccountNumber编制了索引。Customer和CustomerGroup都有超过500万个节点。笔记本电脑还不错(使用neo4j导入需要2分钟)。我印象深刻


    谢谢你能给我的帮助

    您应该能够定义要在
    neo4j导入中创建的关系,而不是创建
    customergroup
    标签并为此创建节点。当然也会快得多。见:

    对于您的问题,您可能可以做如下操作:

    MATCH (cg:CustomerGroup)
    MATCH (customer:Customer {AccountNumber: cg. AccountNumber}), (group:Group {GroupName: cg.GroupName})
    CREATE (customer)-[:IN_GROUP]->(group)
    
    您肯定要首先确保在
    :Customer(AccountNumber)
    :Group(GroupName)
    上有索引。但即使如此,它仍然比作为初始导入的一部分进行要慢得多


    此外,您可能希望也可能不希望
    合并
    而不是
    创建

    而不是创建
    客户组
    标签并为此创建节点,您应该能够定义要在
    neo4j导入
    中创建的关系。当然也会快得多。见:

    对于您的问题,您可能可以做如下操作:

    MATCH (cg:CustomerGroup)
    MATCH (customer:Customer {AccountNumber: cg. AccountNumber}), (group:Group {GroupName: cg.GroupName})
    CREATE (customer)-[:IN_GROUP]->(group)
    
    您肯定要首先确保在
    :Customer(AccountNumber)
    :Group(GroupName)
    上有索引。但即使如此,它仍然比作为初始导入的一部分进行要慢得多

    此外,您可能希望也可能不希望使用
    合并
    而不是
    创建