Neo4j ha un proprio linguaggio di query chiamato Cypher. Cypher utilizza una sintassi simile a SQL (Structured Query Language).
Esempio
Ecco un esempio di istruzione Cypher:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Questa istruzione Cypher restituisce un nodo "Persona" in cui la proprietà del nome è "Homer Flinstone".
Se si trattava di una query SQL su un database relazionale, potrebbe essere più simile a questo:
SELECT * FROM Person WHERE name = "Homer Flinstone";
Tuttavia, ricorda, Neo4j non memorizza i suoi dati in tabelle come il modello di database relazionale. È tutto in nodi e relazioni. Quindi la query Cypher sopra sta interrogando i nodi, le loro etichette e le loro proprietà. L'esempio SQL, d'altra parte, sta interrogando tabelle, righe e colonne.
SQL è stato progettato per essere utilizzato con relazionale sistemi di gestione di database (DBMS). Neo4j è un DBMS NoSQL, in quanto non usa il modello relazionale e non usa SQL.
Cypher è stato progettato specificamente per lavorare con il modello di dati Neo4j, che riguarda i nodi e le loro relazioni tra loro.
Sintassi ASCII-Art
Cypher utilizza ASCII-Art per rappresentare i modelli. Questa è una cosa utile da ricordare quando si impara la lingua per la prima volta. Se dimentichi come scrivere qualcosa, visualizza semplicemente come apparirà il grafico e dovrebbe aiutarti.
(a)-[:KNOWS]->(b)
Le cose principali da ricordare:
- I nodi sono rappresentati da parentesi, che sembrano cerchi. In questo modo:
(node)
- Le relazioni sono rappresentate da frecce. In questo modo:
->
- Le informazioni su una relazione possono essere inserite tra parentesi quadre. In questo modo:
[:KNOWS]
Definizione dei dati
Ecco alcuni altri punti da ricordare quando si lavora con Cypher:
- I nodi di solito hanno etichette. Gli esempi potrebbero includere "Persona", "Utente", "Attore", "Dipendente", "Cliente".
- I nodi di solito hanno proprietà. Le proprietà forniscono informazioni aggiuntive sul nodo. Gli esempi potrebbero includere "Nome", "Età", "Nato", ecc.
- Le relazioni possono anche avere proprietà.
- Le relazioni di solito hanno un tipo (questo è fondamentalmente come l'etichetta di un nodo). Gli esempi potrebbero includere "KNOWS", "MI PIACE", "WORKS_FOR", "PURCHASED", ecc.
Quindi, guardando di nuovo l'esempio sopra:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Possiamo vedere che:
- Il nodo è racchiuso tra parentesi
()
. Person
è l'etichetta del nodo.name
è una proprietà del nodo.