Neo4j - Unisci comando
Il comando MERGE è una combinazione del comando CREATE e del comando MATCH.
Il comando CQL MERGE di Neo4j cerca un dato pattern nel grafico. Se esiste, restituisce i risultati.
Se NON esiste nel grafico, crea un nuovo nodo / relazione e restituisce i risultati.
In questo capitolo imparerai come:
- Unisci un nodo con l'etichetta
- Unisci un nodo con le proprietà
- OnCreate e OnMatch
- Unisci una relazione
Sintassi
Di seguito è riportata la sintassi per il comando MERGE.
MERGE (node: label {properties . . . . . . . })
Prima di procedere agli esempi in questa sezione, creare due nodi nel database con le etichette Dhawan e Ind. Creare una relazione di tipo "BATSMAN_OF" da Dhawan a Ind come mostrato di seguito.
CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"})
CREATE (Ind:Country {name: "India"})
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind)
Unione di un nodo con un'etichetta
È possibile unire un nodo nel database in base all'etichetta utilizzando la clausola MERGE. Se provi a unire un nodo in base all'etichetta, Neo4j verifica se esiste un nodo con l'etichetta data. In caso contrario, verrà creato il nodo corrente.
Sintassi
Di seguito è riportata la sintassi per unire un nodo in base a un'etichetta.
MERGE (node:label) RETURN node
Esempio 1
Di seguito è riportato un esempio di Cypher Query che unisce un nodo in Neo4j (in base all'etichetta). Quando esegui questa query, Neo4j verifica se c'è qualche nodo con l'etichettaplayer. In caso contrario, crea un nodo denominato "Jadeja" e lo restituisce.
Se esiste un nodo con l'etichetta data, Neo4j li restituisce tutti.
MERGE (Jadeja:player) RETURN Jadeja
Per eseguire la query di cui sopra, eseguire i seguenti passaggi:
Step 1- Apri l'app desktop Neo4j e avvia il server Neo4j. Apri l'app browser integrata di Neo4j utilizzando l'URLhttp://localhost:7474/ come mostrato nello screenshot seguente.
Step 2 - Copiare e incollare la query desiderata nel prompt del dollaro e premere il pulsante di riproduzione (per eseguire la query) evidenziato nella schermata seguente.
Risultato
All'esecuzione, otterrai il seguente risultato. Dato che hai già creato un nodo chiamato “Dhawan” con l'etichetta “player” nel database, Neo4j lo restituisce come mostrato nello screenshot seguente.
Esempio 2
Ora prova a unire un nodo denominato "CT2013" con un'etichetta denominata Tournament. Poiché non ci sono nodi con questa etichetta, Neo4j crea un nodo con il nome dato e lo restituisce.
MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"})
RETURN CT2013, labels(CT2013)
Per eseguire la query di cui sopra, eseguire i seguenti passaggi:
Step 1- Apri l'app desktop Neo4j e avvia il server Neo4j. Apri l'app browser integrata di Neo4j utilizzando l'URLhttp://localhost:7474/ come mostrato nello screenshot seguente.
Step 2 - Copiare e incollare la query desiderata nel prompt del dollaro e premere il pulsante di riproduzione (per eseguire la query) evidenziato nella schermata seguente.
Risultato
All'esecuzione, otterrai il seguente risultato. Come discusso, poiché non esiste alcun nodo con l'etichetta data (Torneo). Neo4j crea e restituisce il nodo specificato come mostrato nello screenshot seguente.
Unione di un nodo con proprietà
Puoi anche unire un nodo con un insieme di proprietà. Se lo fai, Neo4j cerca una corrispondenza uguale per il nodo specificato, comprese le proprietà. Se non ne trova, ne crea uno.
Sintassi
Di seguito è riportata la sintassi per unire un nodo utilizzando le proprietà.
MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . })
Esempio
Di seguito è riportato un esempio di Cypher Query per unire un nodo utilizzando le proprietà. Questa query tenta di unire il nodo denominato "jadeja" utilizzando proprietà ed etichetta. Poiché non esiste un tale nodo con l'etichetta e le proprietà esatte, Neo4j ne crea uno.
MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
RETURN Jadeja
Per eseguire la query di cui sopra, eseguire i seguenti passaggi:
Step 1- Apri l'app desktop Neo4j e avvia il server Neo4j. Apri l'app browser integrata di Neo4j utilizzando l'URLhttp://localhost:7474/ come mostrato nello screenshot seguente.
Step 2 - Copiare e incollare la query desiderata nel prompt del dollaro e premere il pulsante di riproduzione (per eseguire la query) evidenziato nella schermata seguente.
Risultato
All'esecuzione, otterrai il seguente risultato. Come discusso, poiché non ci sono nodi con l'etichetta e le proprietà specificate, ne crea uno, come mostrato nello screenshot seguente.
OnCreate e OnMatch
Ogni volta che eseguiamo una query di unione, un nodo viene abbinato o creato. Usando sulla creazione e sulla corrispondenza, è possibile impostare le proprietà per indicare se il nodo viene creato o abbinato.
Sintassi
Di seguito è riportata la sintassi di OnCreate e OnMatch clausole.
MERGE (node:label {properties . . . . . . . . . . .})
ON CREATE SET property.isCreated ="true"
ON MATCH SET property.isFound ="true"
Esempio
Di seguito è riportato un esempio di Cypher Query che dimostra l'utilizzo di OnCreate e OnMatchclausole in Neo4j. Se il nodo specificato esiste già nel database, il nodo verrà abbinato e la proprietà con la coppia chiave-valore isFound = "true" verrà creata nel nodo.
Se il nodo specificato non esiste nel database, verrà creato il nodo e al suo interno verrà creata una proprietà con una coppia chiave-valore isCreated = "true".
MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
ON CREATE SET Jadeja.isCreated = "true"
ON MATCH SET Jadeja.isFound = "true"
RETURN Jadeja
Per eseguire la query di cui sopra, eseguire i seguenti passaggi:
Step 1- Apri l'app desktop Neo4j e avvia il server Neo4j. Apri l'app browser integrata di Neo4j utilizzando l'URLhttp://localhost:7474/ come mostrato nello screenshot seguente.
Step 2 - Copiare e incollare la query desiderata nel prompt del dollaro e premere il pulsante di riproduzione (per eseguire la query) evidenziato nella schermata seguente.
Risultato
All'esecuzione, otterrai il seguente risultato. Come discusso, poiché non esiste un nodo con i dettagli specificati, Neo4j lo ha creato insieme alla proprietàisFound come mostrato nello screenshot seguente.
Unisci una relazione
Proprio come i nodi, puoi anche unire le relazioni utilizzando la clausola MERGE.
Esempio
Di seguito è riportato un esempio di Cypher Query che unisce una relazione utilizzando la clausola MATCH in Neo4j. Questa query tenta di unire una relazione denominataWINNERS_OF tra i nodi "ind" (etichetta: Paese e nome: India) e ICC13 (etichetta: torneo e nome: ICC Champions Trophy 2013).
Poiché tale relazione non esiste, Neo4j ne crea una.
MATCH (a:Country), (b:Tournament)
WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013"
MERGE (a)-[r:WINNERS_OF]->(b)
RETURN a, b
Per eseguire la query di cui sopra, eseguire i seguenti passaggi:
Step 1- Apri l'app desktop Neo4j e avvia il server Neo4j. Apri l'app browser integrata di Neo4j utilizzando l'URLhttp://localhost:7474/ come mostrato nello screenshot seguente.
Step 2 - Copiare e incollare la query desiderata nel prompt del dollaro e premere il pulsante di riproduzione (per eseguire la query) evidenziato nella schermata seguente.
Risultato
All'esecuzione, otterrai il seguente risultato. Poiché la relazione specificata non esiste nel database, Neo4j ne crea una come mostrato nello screenshot seguente.
Allo stesso modo, puoi unire più relazioni e anche relazioni non orientate.