2017-04-24 2 views
1

je suis nouveau à neo4j et cypher, je dois créer le contraire de tous les bords du graphique mais j'ai besoin que les bords opposés pour avoir le même type de bords originaux
pour l'illustration en face de (a)-[:sometype]->(b) serait (b)-[:sometype]->(a)
je sais qu'il est très facile de créer à l'opposé de tous les bords en appuyant simplement sur cette commande match (a)-[]->(b) create (b)-[]->(a)
mais comme je l'ai déjà dit j'ai besoin le bord créé pour avoir le même type de bord d'origine mercineo4j créer le bord opposé

+3

est-il une raison particulière pour laquelle vous avez besoin? Neo4j peut traverser les relations dans les deux sens. Si vous en avez réellement besoin, pouvez-vous installer [Procédures APOC] (https://neo4j-contrib.github.io/neo4j-apoc-procedures/) si vous ne l'avez pas déjà installé? Il a quelques procédures de création de relation dynamique qui peuvent aider. – InverseFalcon

+3

Pour souligner l'un des points de @ InverseFalcon: à moins que votre cas d'utilisation ait une * très bonne raison * d'avoir le même type de relation dans les deux sens, vous ne voulez pas le faire - puisque la même relation peut être parcourue dans les deux sens, et c'est une perte de stockage DB et peut rendre vos requêtes plus lentes et plus complexes. – cybersam

Répondre

2

Selon this comment dans une question ouverte dans Github de neo4j ce n'est pas encore possible.

Comme indiqué par InverseFalcon dans ce commentaire, vous pouvez utiliser APOC Procedures pour atteindre cet objectif comme décrit dans this post de Mark Needham blog.

Fist, installez les procédures Apoc. Après cela, .: par exemple

CREATE (a)-[:sometype]->(b) 

//Match... 
MATCH (a)-[r]->(b) 
WITH r, a, b 
// and use apoc.create.relationship to achieve your goal... 
CALL apoc.create.relationship(b, TYPE(r), {}, a) YIELD rel 
RETURN rel 

Testée ici: enter image description here