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 的特定关系?的主要内容,如果未能解决你的问题,请参考以下文章