2016-03-15 34 views
3

我有一些人之間的關係我的圖。搜索不存在Neo4j通過Cypher

我的數據(下面生成腳本)

create (s:Person {name: "SUE"}) create(d:Person {name: "DAVID"}) create(j:Person {name: "JACK"}) create(m:Person {name: "MARY"}) create(js:Person {name: "JASON"}) create(b:Person {name: "BOB"}) create(a1:Adress {id:1}) create(a2:Adress {id:2}) create(a3:Adress {id:3}) create(a4:Adress {id:4}) create(a5:Adress {id:5}) merge (d)-[:MOTHER]->(s) merge(j)-[:MOTHER]->(s) merge(js)-[:MOTHER]->(m) merge(b)-[:MOTHER]->(m) merge(b)-[:CURRENT_ADRESS]->(a1) merge(js)-[:CURRENT_ADRESS]->(a2) merge(j)-[:CURRENT_ADRESS]->(a3) merge(s)-[:CURRENT_ADRESS]->(a4) merge(d)-[:CURRENT_ADRESS]->(a5) 

enter image description here;

我能得到誰與她的孩子的母親住:

MATCH (p:Person)-[:CURRENT_ADRESS]->(a:Adress)<-[:CURRENT_ADRESS]-(t), (t)-[:MOTHER]->(p) 
return p.name,t.name 

p.name t.name 
MARY JASON 

,但我想誰不與她同住的兒童的母親。

我如何在Cyper中做到這一點?

+0

我編輯我的職務。我只想選擇「SUE」。因爲她沒有和她的任何一個孩子住在一起。 – AgonyClanKios

回答

0

試試這個

MATCH (p:Person)-[:CURRENT_ADRESS]-(a:Adress), (p)-[:MOTHER|:FATHER]->(t) 
WITH p,a,t 
MATCH (p), (t) where not (t)-[:CURRENT_ADRESS]-(a) 
return p.NAME,t.NAME 
4

其實在圖形中,每個人都生活在一個不同的地址,由於不同的標識符。

讓我們建立一個圖形例如引入其居住在同一地址的姐姐:

​​

enter image description here

現在,這是非常簡單的,匹配的家庭成員沒有在深度2一個CURRENT_ADDRESS關係家庭成員:

MATCH (p:Person)-[:MOTHER|:FATHER|:SISTER]->(familyMember) 
WHERE NOT EXISTS((p)-[:CURRENT_ADDRESS*2]-(familyMember)) 
RETURN familyMember 

enter image description here

0

這應該工作:

MATCH (p:Person)-[:CURRENT_ADRESS]-(a:Adress), (p)-[:MOTHER|:FATHER]->(t)-[:CURRENT_ADRESS]-(b:Adress) 
WHERE a <> b 
return p.NAME, t.NAME; 

順便說一句,我想也出臺相應的箭頭方向上CURRENT_ADRESS關係。

0

終於我找到了。

match path=(p:Person)-[:MOTHER]->(m:Person)-[:CURRENT_ADRESS]->(a:Adress) 
where all(x in nodes(path) where not exists((p)-[:CURRENT_ADRESS]->(a))) 
return path 

enter image description here