1

我有这个密码查询来插入 10,000 个节点。这很好用。

LOAD CSV WITH HEADERS FROM "file:///persons.csv" AS csv
MERGE (u2:User {mobileNumber: csv.mobileNumber})
       ON CREATE SET u2.memberType = csv.memberType
       ON CREATE SET u2.accountId = csv.accountId
       ON CREATE SET u2.accountType = csv.accountType
       ON CREATE SET u2.createdAt = csv.createdAt
       SET u2.updatedAt = csv.updatedAt

现在有 20 个新节点与其他一些已经存在的节点创建 [:contact] 关系。我的查询创建了 20,000 个额外节点并且运行速度非常慢。我知道合并有一些重复问题。我怎样才能让这段代码运行得更快?

LOAD CSV WITH HEADERS FROM "file:///phonebook.csv" AS csv
MERGE (:User{mobileNubmer: csv.ownerMobileNumber})-[c:CONTACT]->
(:User{mobileNubmer:csv.contactMobileNumber})
    ON CREATE SET c.createdAt = csv.createdAt
    ON MATCH set c.previousIsActive = 
    csv.previousIsActive
    SET c.name = csv.name
    SET c.relationship = csv.relationship
    SET c.isActive = csv.isActive
    SET c.updatedAt = csv.updatedAt;
4

1 回答 1

1

首先,您的第二个查询是错误的,因为您正在搜索mobileNubmer,而不是mobileNumber。其次,mobileNumber应该是 User 的唯一约束。第三(考虑到约束),这应该是你的语法:

LOAD CSV WITH HEADERS FROM "file:///phonebook.csv" AS csv
MATCH (owner:User{mobileNumber: csv.ownerMobileNumber})
MATCH (contact:User{mobileNumber: csv.contactMobileNumber})
MERGE (owner)-[c:CONTACT]->(contact)
    ON CREATE SET c.createdAt = csv.createdAt
    ON MATCH set c.previousIsActive = csv.previousIsActive
    SET c.name = csv.name
    SET c.relationship = csv.relationship
    SET c.isActive = csv.isActive
    SET c.updatedAt = csv.updatedAt;

希望这可以帮助。

问候,汤姆

于 2017-09-20T17:41:56.253 回答