2015-02-12 21 views
1

連接線I創建了下面的節點和關係的Neo4jNeo4j的關係沒有顯示在圖中

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) 

我看不到公民節點和id之間的「PersonUniqueIdentifier」關係:在圖表上個人節點。

Screen shot of graph

+0

你有很多事情在這裏,我認爲是掛你。你能描述一下你想要的最終狀態是什麼嗎? – 2015-02-12 00:56:34

+0

只想看到公民身份節點連接到uid:Person節點爲什麼它沒有正確地繪製關係? – 2015-02-12 01:13:49

+1

你是匹配的人,和兩個公民身份節點,然後你試圖創建兩個不能完成的雙向關係; neo4j關係只是單向的。 (p:Person),(nb:Citizenship {type:「Naturalized」})CREATE p- [r:PersonUniqueIdentifier] - > nb return * – 2015-02-12 01:28:41

回答

2

首先,我想先作做索引/約束的習慣。這裏沒有太多的數據,但是如果在添加數據後添加索引,則需要先通過所有節點。另外,創建約束也會爲您添加索引,因此不需要該行。好像你在這裏混了變數,所以重構了一下:

CREATE CONSTRAINT ON (person:Person) ASSERT person.unique_id IS UNIQUE 

而且你CitizenshipCREATE s的使用相同的變量名。我不知道這是否會必然導致一個問題,但它是簡單的做到這一點反正:

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'})