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

时间:2013-09-25 23:38:11

标签: neo4j cypher

让我们说,我有一个用户:

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的新手。任何建议真的很棒!

谢谢!

2 个答案:

答案 0 :(得分:40)

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

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

答案 1 :(得分:1)

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

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;

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