Ago*_*ios 5 graph not-exists 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)
Run Code Online (Sandbox Code Playgroud)
我可以得到和她的孩子一起生活的母亲:
MATCH (p:Person)-[:CURRENT_ADRESS]->(a:Adress)<-[:CURRENT_ADRESS]-(t), (t)-[:MOTHER]->(p)
return p.name,t.name
p.name t.name
MARY JASON
Run Code Online (Sandbox Code Playgroud)
但我想得到不和她的任何孩子一起生活的母亲。
我怎样才能在 Cyper 中做到这一点?
实际上在你的图表中,由于不同的标识符,每个人都住在不同的地址。
让我们构建一个图形示例,介绍住在同一地址的姐妹:
CREATE
(p:Person)-[:MOTHER]->(m:Person),
(p)-[:FATHER]->(f:Person),
(p)-[:SISTER]->(s:Person),
(p)-[:CURRENT_ADDRESS]->(a:Adress),
(m)-[:CURRENT_ADDRESS]->(b:Adress),
(f)-[:CURRENT_ADDRESS]->(c:Adress),
(s)-[:CURRENT_ADDRESS]->(a)
Run Code Online (Sandbox Code Playgroud)
现在这很简单,将没有CURRENT_ADDRESS深度关系的家庭成员与家庭成员匹配:
MATCH (p:Person)-[:MOTHER|:FATHER|:SISTER]->(familyMember)
WHERE NOT EXISTS((p)-[:CURRENT_ADDRESS*2]-(familyMember))
RETURN familyMember
Run Code Online (Sandbox Code Playgroud)
尝试这个
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
Run Code Online (Sandbox Code Playgroud)