web-dev-qa-db-fra.com

Neo4j: Comment supprimer une relation spécifique avec Cypher?

Disons que j'ai un utilisateur:

CREATE (n { name: 'Tamil' })

et 2 rôles:

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

Ensuite, je fais la relation entre l'utilisateur et chacun des 2 rôles.

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

Maintenant, je veux supprimer la relation de rôle de testeur de l'utilisateur. J'ai essayé:

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

Mais, il renvoie les deux relations. Je sais que je peux attacher une propriété à des relations. Mais, encore une fois, je ne connais pas la syntaxe de chiffrement pour cela.

Je suis nouveau sur Neo4j. Toutes les suggestions seraient vraiment super!

Merci!

24
user405398

J'ai supprimé la relation sur votre graphique d'origine avec cette requête:

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

Je l'ai trouvé. J'ai changé les relations pour avoir une propriété. Comme ça:

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

Ensuite, ce code ci-dessous a supprimé la relation spécifiée.

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

Je ne suis pas sûr que ce soit la bonne façon de faire ou non. Mais ça marche.

1
user405398