2017-01-12 4 views
0

I Strukturen wie"Kopieren" ein Bogen in Neo4j

(a) -[r]-> (b) -[:SPECIAL_LABEL]-> (c) 

übereinstimmen soll und dann CREATE oder verschmelzen, um eine Beziehung

(a)-[s]->(c) 

wo s die gleichen Etiketten wie r hat (so ist es eine "Kopie" von r, die auf (c) statt zeigt.

Kann ich dies mit einer Chiffre Abfrage erreichen? Oder sollte ich ein Ja schreiben va Programm, das der Datenbank eine Liste von Bögen (über den transaktionalen http-Endpunkt) gibt?

Ich benutze Neo4j 2.3.7.

+0

Wie viele verschiedene Labels haben Knoten? –

+0

Sie meinen: Wie viele verschiedene Etiketten werden auf den Bögen verwendet? Das wäre etwa 10. –

Antwort

1

Wenn die Etiketten sind bekannt und sie sind nicht so sehr ist es möglich, einen Aufbau "pseudo-if" zu verwenden:

match (a) -[r]-> (b) -[:SPECIAL_LABEL]-> (c) 
with a, c, type(r) as relType 
FOREACH(if IN CASE WHEN relType='type1' THEN [1] ELSE [] END | 
    MERGE (a)-[r:type1]->(b) 
) 
FOREACH(if IN CASE WHEN relType='type2' THEN [1] ELSE [] END | 
    MERGE (a)-[r:type2]->(b) 
) 
FOREACH(if IN CASE WHEN relType='type3' THEN [1] ELSE [] END | 
    MERGE (a)-[r:type3]->(b) 
) 
RETURN (a)-->(b) 

P. S. Es gibt keine Beziehung label. Aber sie haben eine type. Einziger.

+0

Eigentlich verstehe ich nicht, was Ihre Abfragen tun ... Warum brauchen wir eine Zufallszahl? –

+0

In diesem Fall ist es nur für ein Beispiel notwendig. Wie auf der Basis bekannter Werte, um eine Beziehung mit dem gewünschten Label zu erstellen. –

+0

Ich denke, dass Sie Recht haben: Wenn Sie eine bekannte Liste von 10 Etiketten haben, können Sie wahrscheinlich 10 Abfragen erstellen, die erreichen, was Sie erreichen wollen. Ich werde darüber nachdenken. Aber bitte lösche, erkläre oder ändere dein Beispiel, weil es nicht wirklich zu der Frage passt. –