graph - 通过 Cypher 在 Neo4j 中不存在搜索

标签 graph neo4j cypher not-exists

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

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

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 ;

我可以找到和她的 child 住在一起的母亲:
MATCH (p:Person)-[:CURRENT_ADRESS]->(a:Adress)<-[:CURRENT_ADRESS]-(t), (t)-[:MOTHER]->(p)
return p.name,t.name

p.name  t.name
MARY    JASON

但我想得到不和她的任何 child 一起生活的母亲。

我怎样才能在 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)

enter image description here

现在这很简单,匹配没有CURRENT_ADDRESS的家庭成员与家庭成员的深度关系:
MATCH (p:Person)-[:MOTHER|:FATHER|:SISTER]->(familyMember)
WHERE NOT EXISTS((p)-[:CURRENT_ADDRESS*2]-(familyMember))
RETURN familyMember

enter image description here

关于graph - 通过 Cypher 在 Neo4j 中不存在搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008315/

相关文章:

c - 难以理解使用链表实现图的方法

algorithm - 近似最近对算法

vector - 推荐引擎: Cosine Similarity vs Measuring %difference between each vector component

neo4j - 我怎么能在neo4j中写这个查询?

regex - 使用正则表达式的 Neo4j 索引查询

neo4j - 根据图形变化更新 Neo4j 嵌入

neo4j - Cypher 查询返回 A 涉及的所有关系的集合

python - 如何在Python中使用networkx和matplotlib在同一张图中绘制不同形状和bbox面色的节点?

python - 使用 matplotlib 在 python 中绘制堆叠直方图

Neo4j 密码 : control order of MATCH based on input array?