我在neo4j中创建了以下节点和关系
CREATE (United_States:Citizenship { type : “Naturalized”})
CREATE (United_States:Citizenship { type : “Native_Born”})
CREATE (uid:Person { unique_id: 'A23AF39D-BEED-4FFC-B080-1362920FA7A8', id_type: '128bit_UUID' })
MATCH (uid:Person),(Native_Born:Citizenship) WHERE uid:Person="A23AF39D-BEED-4FFC-B080-1362920FA7A8" CREATE (uid) <- [ r:PersonUniqueIdentifier ] -> (Native_Born)
CREATE (fn:Person { first_name:'Willie', id_type:'128bit_UUID'})
CREATE (ln:Person { last_name:'Armstrong', id_type:'128bit_UUID'}))
CREATE CONSTRAINT ON (uid:Person) ASSERT Person.unique_id IS UNIQUE
CREATE INDEX ON :Person(unique_id)
我没有在Citizenship节点和图表上的id:Person节点之间看到'PersonUniqueIdentifier'关系。
答案 0 :(得分:2)
首先,我会养成先做索引/约束的习惯。这里没有很多数据,但如果在添加数据后添加索引,则需要首先遍历所有节点。此外,创建约束还会为您添加索引,因此不需要该行。看起来你在这里混淆变量,所以重构一下:
CREATE CONSTRAINT ON (person:Person) ASSERT person.unique_id IS UNIQUE
您的Citizenship
CREATE
也使用相同的变量名称。我不知道这是否一定会导致问题,但无论如何这样做更简单:
CREATE (:Citizenship { type : “Naturalized”}), (:Citizenship { type : “Native_Born”})
这句话对我来说很好(但是,如果你愿意的话,你可能会丢失变量):
CREATE (person:Person { unique_id: 'A23AF39D-BEED-4FFC-B080-1362920FA7A8', id_type: '128bit_UUID' })
这里有一些问题。以下是我如何重构它:
MATCH (person:Person),(citizenship:Citizenship)
WHERE
person.unique_id="A23AF39D-BEED-4FFC-B080-1362920FA7A8",
citizenship.type = 'Native_Born'
CREATE (person)-[:HAS_CITIZENSHIP]->(citizenship)
我不确定你想在这做什么。看起来你想要创建一个人,所以我会这样做:
CREATE (:Person { first_name:'Willie', id_type: '128bit_UUID', last_name:'Armstrong'})