Neo4j

Base de datos de grafos nativa - lenguaje Cypher, modelado relacional, recorridos rapidos

TL;DR

Qué: Una base de datos de grafos nativa para datos conectados.

Por qué: Orientada a relaciones, modelado intuitivo, recorridos potentes, lenguaje de consulta Cypher.

Quick Start

Instalar con Docker:

docker run --name neo4j -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/password \
  -d neo4j:latest

Acceso: Abre http://localhost:7474 (Interfaz del navegador)

Conectar: Usa neo4j / password

Crear nodos y relaciones:

CREATE (john:Person {name: 'John', age: 30})
CREATE (jane:Person {name: 'Jane', age: 28})
CREATE (john)-[:KNOWS]->(jane)
RETURN john, jane

Cheatsheet

OperaciónCypher
Crear nodoCREATE (n:Label {props})
Crear relaciónCREATE (a)-[:TYPE]->(b)
Encontrar nodosMATCH (n:Label) RETURN n
Buscar por propiedadMATCH (n {name: 'John'}) RETURN n
Encontrar relacionesMATCH (a)-[r:TYPE]->(b) RETURN r
ActualizarSET n.prop = value
EliminarDELETE n o DETACH DELETE n

Gotchas

Basic CRUD

// Create
CREATE (p:Person {name: 'Alice', email: '[email protected]'})

// Read
MATCH (p:Person {name: 'Alice'}) RETURN p

// Update
MATCH (p:Person {name: 'Alice'})
SET p.age = 25
RETURN p

// Delete (with relationships)
MATCH (p:Person {name: 'Alice'})
DETACH DELETE p

Relationship patterns

// Directed relationship
MATCH (a:Person)-[:KNOWS]->(b:Person)
RETURN a, b

// Undirected (any direction)
MATCH (a:Person)-[:KNOWS]-(b:Person)
RETURN a, b

// Multiple hops
MATCH (a:Person)-[:KNOWS*1..3]->(b:Person)
RETURN a, b

// Variable-length path
MATCH path = (a:Person)-[:KNOWS*]->(b:Person)
RETURN path

Aggregations

// Count friends
MATCH (p:Person)-[:KNOWS]->(friend)
RETURN p.name, count(friend) as friendCount

// Group by
MATCH (p:Person)
RETURN p.city, count(p) as population
ORDER BY population DESC

Indexes

// Create index
CREATE INDEX FOR (p:Person) ON (p.name)

// Create constraint (unique)
CREATE CONSTRAINT FOR (p:Person) REQUIRE p.email IS UNIQUE

// Show indexes
SHOW INDEXES

Next Steps