Graph Neo4j中不存在通过Cypher进行搜索的功能

Graph Neo4j中不存在通过Cypher进行搜索的功能,graph,neo4j,cypher,not-exists,Graph,Neo4j,Cypher,Not Exists,在我的图表中,人与人之间有一些关系 我的数据(生成下面的脚本) ) 我可以找到和孩子住在一起的母亲: MATCH (p:Person)-[:CURRENT_ADRESS]->(a:Adress)<-[:CURRENT_ADRESS]-(t), (t)-[:MOTHER]->(p) return p.name,t.name p.name t.name MARY JASON MATCH(p:Person)-[:CURRENT_address]->(a:address)(

在我的图表中,人与人之间有一些关系

我的数据(生成下面的脚本)

)

我可以找到和孩子住在一起的母亲:

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

p.name  t.name
MARY    JASON
MATCH(p:Person)-[:CURRENT_address]->(a:address)(p)
返回p.name,t.name
p、 name t.name
玛丽·杰森
但我想找一个没有孩子的母亲

我怎样才能在Cyper中做到这一点?

试试这个

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

实际上,在你的图表中,每个人都因为不同的标识符而住在不同的地址

让我们构建一个图形示例,介绍住在同一地址的姐妹:

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)

现在这很简单,将depth2中没有
当前地址关系的家庭成员与家庭成员进行匹配:

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

这应该可以:

MATCH (p:Person)-[:CURRENT_ADRESS]-(a:Adress), (p)-[:MOTHER|:FATHER]->(t)-[:CURRENT_ADRESS]-(b:Adress)
WHERE a <> b
return p.NAME, t.NAME;
MATCH(p:Person)-[:CURRENT\u address]-(a:address),(p)-[:MOTHER\124;:FATHER]->(t)-[:CURRENT\u address]-(b:address)
a和b在哪里
返回p.NAME,t.NAME;
顺便说一句,我还把适当的方向箭头放在
当前地址
关系上。

最后我找到了它

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

我编辑了我的帖子。我只想选择“苏”。因为她没有和她的孩子住在一起。
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