Neo4j har ett eget frågespråk som heter Cypher. Cypher använder en liknande syntax som SQL (Structured Query Language).
Exempel
Här är ett exempel på en Cypher-sats:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Denna Cypher-sats returnerar en "Person"-nod där namnegenskapen är "Homer Flinstone".
Om det här var SQL som frågade efter en relationsdatabas, kan den se ut mer så här:
SELECT * FROM Person WHERE name = "Homer Flinstone";
Kom dock ihåg att Neo4j inte lagrar sina data i tabeller som den relationella databasmodellen. Det är allt i noder och relationer. Så Cypher-frågan ovan frågar noder, deras etiketter och deras egenskaper. SQL-exemplet å andra sidan är att fråga efter tabeller, rader och kolumner.
SQL designades för att användas med relationell databashanteringssystem (DBMS). Neo4j är en NoSQL DBMS, eftersom den inte använder den relationella modellen och den använder inte SQL.
Cypher designades specifikt för att arbeta med Neo4j-datamodellen, som handlar om noder och deras relationer med varandra.
ASCII-Art Syntax
Cypher använder ASCII-Art för att representera mönster. Detta är en praktisk sak att komma ihåg när du först lär dig språket. Om du glömmer hur man skriver något, visualisera bara hur grafen kommer att se ut så borde det hjälpa.
(a)-[:KNOWS]->(b)
De viktigaste sakerna att komma ihåg:
- Noder representeras av parenteser som ser ut som cirklar. Så här:
(node)
- Relationer representeras av pilar. Så här:
->
- Information om en relation kan infogas mellan hakparenteser. Så här:
[:KNOWS]
Definiera data
Här är några fler punkter att komma ihåg när du arbetar med Cypher:
- Noder har vanligtvis etiketter. Exempel kan vara "Person", "Användare", "Skådespelare", "Anställd", "Kund".
- Noder har vanligtvis egenskaper. Egenskaper ger extra information om noden. Exempel kan vara "Namn", "Ålder", "Född" etc
- Relationer kan också ha egenskaper.
- Relationer har vanligtvis en typ (detta är i grunden som en nods etikett). Exempel kan vara "KNOWS", "LIKES", "WORKS_FOR", "PURCHASED" etc.
Så tittar på exemplet ovan igen:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Vi kan se att:
- Noden är omgiven av parenteser
()
. Person
är nodens etikett.name
är en egenskap för noden.