2013-12-08 12 views
29

Ich versuche zum ersten Mal Neo4j. Ich benutze die Community Edition 2.0-RC1.Hinzufügen einer Beziehung zu bestehenden Knoten mit Cypher

Ich habe einige Knoten erstellt:

MERGE (u:User{username:'admin',password:'admin'}) 
MERGE (r1:Role{name:'ROLE_ADMIN'}) 
MERGE (r2:Role{name:'ROLE_WEB_USER'}) 
MERGE (r3:Role{name:'ROLE_REST_USER'}) 

und jetzt möchte ich Beziehungen zwischen den Knoten hinzuzufügen. Jedoch möchte ich die vorhandene Datenbank, die mit dem obigen Skript erstellt wurde, nicht löschen, die Anweisungen hinzufügen und es erneut ausführen. Ich möchte Beziehungen zu den vorhandenen Knoten hinzufügen. Google hat mir geholfen, das zu finden:

Das funktioniert gut (obwohl ich nicht die ganze Syntax verstehe). Ich bin mir jedoch bewusst, dass dies jeden Knoten mit einer username -Eigenschaft und jeden Knoten mit einer name -Eigenschaft findet, anstatt Etiketten zu verwenden, um zu überprüfen, ob er den richtigen Knotentyp hat.

Wie kann ich das gleiche mit Etiketten tun?

Antwort

49

In Neo4j 2.0 Sie Schema Indizes für Ihre Etiketten und die Eigenschaften, die Sie für die Suche verwenden, erstellen:

CREATE INDEX ON :User(username) 
CREATE INDEX ON :Role(name) 

Beziehungen erstellen Sie verwenden könnten:

MATCH (u:User {username:'admin'}), (r:Role {name:'ROLE_WEB_USER'}) 
CREATE (u)-[:HAS_ROLE]->(r) 

Die MATCH einen Index verwenden, wenn möglich. Wenn kein Index vorhanden ist, sucht er nach allen Knoten, die das Label tragen, und prüft, ob die Eigenschaft übereinstimmt.

N.B. Die obige Syntax funktioniert nur mit Neo4j 2.0.0-RC1 und höher.

+4

r ist nicht die beste Wahl für einen Variablennamen für den zweiten Knoten, oft wird r als Variablenname für die Beziehung festgelegt. –

Verwandte Themen