Neo4j har sit eget forespørgselssprog kaldet Cypher. Cypher bruger en lignende syntaks som SQL (Structured Query Language).
Eksempel
Her er et eksempel på en Cypher-sætning:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Denne Cypher-sætning returnerer en "Person"-node, hvor navnegenskaben er "Homer Flinstone".
Hvis dette var SQL, der forespurgte en relationsdatabase, kunne det se mere sådan ud:
SELECT * FROM Person WHERE name = "Homer Flinstone";
Men husk, Neo4j gemmer ikke sine data i tabeller som den relationelle databasemodel. Det hele er i noder og relationer. Så Cypher-forespørgslen ovenfor forespørger noder, deres etiketter og deres egenskaber. SQL-eksemplet på den anden side er forespørgsler om tabeller, rækker og kolonner.
SQL blev designet til at blive brugt med relationel databasestyringssystemer (DBMS). Neo4j er et NoSQL DBMS, idet det ikke bruger den relationelle model, og det bruger ikke SQL.
Cypher er designet specifikt til at arbejde med Neo4j-datamodellen, som handler om noder og deres forhold til hinanden.
ASCII-Art Syntaks
Cypher bruger ASCII-Art til at repræsentere mønstre. Dette er en praktisk ting at huske, når du først lærer sproget. Hvis du glemmer, hvordan du skriver noget, skal du bare visualisere, hvordan grafen vil se ud, og det burde hjælpe.
(a)-[:KNOWS]->(b)
De vigtigste ting at huske:
- Knuder er repræsenteret af parenteser, der ligner cirkler. Sådan:
(node)
- Relationer er repræsenteret med pile. Sådan:
->
- Oplysninger om en relation kan indsættes mellem firkantede parenteser. Sådan:
[:KNOWS]
Definition af data
Her er nogle flere punkter, du skal huske, når du arbejder med Cypher:
- Noder har normalt etiketter. Eksempler kunne omfatte "Person", "Bruger", "Skuespiller", "Medarbejder", "Kunde".
- Noder har normalt egenskaber. Egenskaber giver ekstra information om noden. Eksempler kunne omfatte "navn", "alder", "født" osv.
- Relationer kan også have egenskaber.
- Relationer har normalt en type (dette er grundlæggende ligesom en nodes etiket). Eksempler kunne omfatte "KNOWS", "LIKES", "WORKS_FOR", "PURCHASED" osv.
Så ser på ovenstående eksempel igen:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Vi kan se, at:
- Knuden er omgivet af parenteser
()
. Person
er nodens etiket.name
er en egenskab for noden.