首页 > 解决方案 > 如何在不提供节点 ID 的情况下在 neo4j 中快速创建节点?

问题描述

Neo4j 不支持节点 id 同名,如

    CREATE (p:Person { id:100001, firstname: 'John', surname: 'Wood', age: 25 })
    CREATE (p:Person { id:100002, firstname: 'Jack', surname: 'Wood', age: 35 })
    CREATE (p:Person { id:100003, firstname: 'John', surname: 'Wood', age: 45 })
    CREATE (p:Person { id:100004, firstname: 'Jack', surname: 'Wood', age: 55 })

必须提供不同的 id,例如:

    CREATE (p100001:Person { id:100001, firstname: 'John', surname: 'Wood', age: 25 })
    CREATE (p100002:Person { id:100002, firstname: 'Jack', surname: 'Wood', age: 35 })
    CREATE (p100003:Person { id:100003, firstname: 'John', surname: 'Wood', age: 45 })
    CREATE (p100004:Person { id:100004, firstname: 'Jack', surname: 'Wood', age: 55 })

如何在不提供 ID 的情况下快速创建节点?

非常感谢。

标签: neo4jcypher

解决方案


节点在 Neo4J 中使用内部生成的 id 属性自动初始化,在创建后通过调用 id(node) 可用。

虽然在技术上您可以像上面那样设置自己的 ID,但我的经验是,最好将您的属性重命名为其他名称,例如 personId。

对于您的问题,您可以使用 foreach 遍历源数据并创建节点,而无需声明唯一变量(为简洁起见,本示例中仅创建了两个节点):

foreach (person in [{firstName:'John', surname:'Wood', age:25}, {firstName:'Jack', surname:'Wood', age:35}] |
create (p:Person{name:person.name, age:person.age})
)

推荐阅读