O Neo4j possui sua própria linguagem de consulta chamada Cypher. Cypher usa uma sintaxe semelhante ao SQL (Structured Query Language).
Exemplo
Aqui está um exemplo de uma declaração Cypher:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Esta declaração Cypher retorna um nó "Person" onde a propriedade name é "Homer Flinstone".
Se isso fosse SQL consultando um banco de dados relacional, poderia ser mais parecido com isto:
SELECT * FROM Person WHERE name = "Homer Flinstone";
No entanto, lembre-se, o Neo4j não armazena seus dados em tabelas como o modelo de banco de dados relacional. Está tudo em nós e relacionamentos. Portanto, a consulta Cypher acima está consultando nós, seus rótulos e suas propriedades. O exemplo SQL, por outro lado, está consultando tabelas, linhas e colunas.
SQL foi projetado para ser usado com relacional sistemas de gerenciamento de banco de dados (SGBD). O Neo4j é um SGBD NoSQL, pois não utiliza o modelo relacional e não utiliza SQL.
Cypher foi projetado especificamente para trabalhar com o modelo de dados Neo4j, que trata de nós e seus relacionamentos entre si.
Sintaxe ASCII-Arte
Cypher usa ASCII-Art para representar padrões. Isso é uma coisa útil para se lembrar ao aprender o idioma pela primeira vez. Se você esquecer como escrever algo, apenas visualize como o gráfico ficará e isso deve ajudar.
(a)-[:KNOWS]->(b)
As principais coisas a serem lembradas:
- Os nós são representados por parênteses, que se parecem com círculos. Assim:
(node)
- Os relacionamentos são representados por setas. Assim:
->
- Informações sobre um relacionamento podem ser inseridas entre colchetes. Assim:
[:KNOWS]
Definindo os dados
Aqui estão mais alguns pontos a serem lembrados ao trabalhar com o Cypher:
- Os nós geralmente têm rótulos. Os exemplos podem incluir "Pessoa", "Usuário", "Ator", "Funcionário", "Cliente".
- Os nós geralmente têm propriedades. As propriedades fornecem informações extras sobre o nó. Os exemplos podem incluir "Nome", "Idade", "Nascido", etc
- Os relacionamentos também podem ter propriedades.
- Os relacionamentos geralmente têm um tipo (isso é basicamente como o rótulo de um nó). Os exemplos podem incluir "KNOWS", "LIKES", "WORKS_FOR", "PURCHASED" etc.
Então, olhando para o exemplo acima novamente:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Nós podemos ver isso:
- O nó está entre parênteses
()
. Person
é o rótulo do nó.name
é uma propriedade do nó.