Neo4j:如何删除与 cypher 的特定关系?

Posted

技术标签:

【中文标题】Neo4j:如何删除与 cypher 的特定关系?【英文标题】:Neo4j: How do I delete a specific relationship with cypher? 【发布时间】:2013-10-01 18:07:18 【问题描述】:

假设我有一个用户:

CREATE (n  name: 'Tamil' )

和 2 个角色:

CREATE (n  name: 'developer'  ) 
CREATE (n  name: 'tester'  )

然后,我在用户和两个角色之间建立关系。

CYPHER 1.9  START a = node(*), b = node(*) 
WHERE a.name = 'Tamil' AND b.name = 'developer' 
CREATE (a)-[r:HAS_ROLE]->(b) 
RETURN r

CYPHER 1.9  START a = node(*), b = node(*) 
WHERE a.name = 'Tamil' AND b.name = 'tester' 
CREATE (a)-[r:HAS_ROLE]->(b) 
RETURN r

现在,我想从用户中删除测试员角色关系。 我试过了:

CYPHER 1.9  START a = node:node_auto_index('name:Tamil') 
MATCH a-[r:HAS_ROLE]-() 
RETURN r

但是,它返回两种关系。 我知道我可以将财产与关系联系起来。但是,同样,我不知道密码语法。

我是 Neo4j 的新手。任何建议都会非常棒!

谢谢!

【问题讨论】:

【参考方案1】:

我使用此查询删除了您原始图表上的关系:

START n=node(*) 
MATCH (n)-[rel:HAS_ROLE]->(r) 
WHERE n.name='Tamil' AND r.name='tester' 
DELETE rel

【讨论】:

对于 3.0.3 版本,您必须将 MATCH 子句更改为 MATCH (n)-[rel:HAS_ROLE]->(r ) 否则会出现错误(注意 'n 周围的括号' 和 'r') 语法和2019一样吗?【参考方案2】:

我找到了。我改变了关系以拥有财产。像这样:

CYPHER 1.9  START a = node(*), b = node(*) 
WHERE a.name = 'Tamil' AND b.name = 'developer' 
CREATE (a)-[r:HAS_ROLE id: xyz]->(b) 
RETURN r

CYPHER 1.9  START a = node(*), b = node(*) 
WHERE a.name = 'Tamil' AND b.name = 'tester' 
CREATE (a)-[r:HAS_ROLE id: abc]->(b) 
RETURN r

那么下面这段代码删除了指定的关系。

CYPHER 1.9  START a = node:node_auto_index('name:Tamil') 
MATCH a-[r:HAS_ROLE]-() 
WHERE r.id = abc
DELETE r;

我不确定这是否是正确的做法。但是,它有效。

【讨论】:

这似乎很违反直觉 - 你怎么知道关系的 ID 是什么?看看 Werner 的答案,它应该对你有用。

以上是关于Neo4j:如何删除与 cypher 的特定关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Neo4J 的 Cypher 查询返回关系类型?

Neo4j 第十一篇:Cypher函数

CYPHER 语句(Neo4j)

neo4j cypher 节点可以模糊匹配么

neo4j cypher:如何更改关系类型

使用 Cypher 在 Neo4j 中通过模式移动与其他节点的关系