Búsquedas avanzadas en un grado Neo4j (Ejemplos)

Base de datos utilizada

Se define primeramente la base de datos a utilizar en el ejemplo.

CREATE (Paco:Person {name:'Paco', born:1964}),
  (Juan:Person {name:'Juan', born:1967}),
  (Andres:Person {name:'Andres', born:1961}),
  (Hugo:Person {name:'Hugo', born:1960}),
  (Natalia:Person {name:'Natalia', born:1967}),
  (Miriam:Person {name:'Miriam', born:1965}),
  (Rosa:Person {name:'Rosa', born:1952})

CREATE 
 (Telefonica:Company {name:'Telefonica', central_office:'Madrid', sector:'telecomunicaciones'}),
 (Repsol:Company {name:'Repsol', central_office:'Madrid', sector:'energia'}),
 (Mercadona:Company {name:'Mercadona', central_office:'Valencia', sector:'alimentacion'})

CREATE
  (Paco)-[:FRIEND_OF {role:['Amigo de Trabajo']}]->(Juan),
  (Paco)-[:FRIEND_OF {role:['Amigo de Trabajo']}]->(Andres),
  (Juan)-[:FRIEND_OF {role:['Amigo de la infancia']}]->(Hugo),
  (Andres)-[:FRIEND_OF {role:['Amigo de la infancia']}]->(Natalia),
  (Miriam)-[:FRIEND_OF {role:['Amigo de Trabajo']}]->(Rosa),
  (Natalia)-[:FRIEND_OF {role:['Amigo de gimnasio']}]->(Juan), 
  (Rosa)-[:FRIEND_OF {role:['Amigo de Trabajo']}]->(Hugo)

CREATE
  (Paco)-[:WORK_AT {position:['Director de Marketing']}]->(Telefonica),
  (Andres)-[:WORK_AT {position:['Director de Marketing']}]->(Telefonica),
  (Miriam)-[:WORK_AT {position:['Director de Marketing']}]->(Repsol),
  (Rosa)-[:WORK_AT {position:['Director de Marketing']}]->(Repsol),
  (Hugo)-[:WORK_AT {position:['Director de Marketing']}]->(Mercadona),
  (Juan)-[:WORK_AT {position:['Director de Marketing']}]->(Mercadona),
  (Natalia)-[:WORK_AT {position:['Director de Marketing']}]->(Mercadona)

Ejemplo avanzado - neo4j visualización

Ejemplo 1: Contar elementos derivados de dos relaciones

Contar para cada persona el número de amigos que tiene trabajando en los diferentes sectores

MATCH (p1:Person)-[:FRIEND_OF]->(p2:Person)-[:WORK_AT]->(c:Company)
RETURN p1.name AS Persona , COUNT(c.sector) AS Sectores

Ejemplo avanzado1 - neo4j visualización tabla

Ejemplo 2: Generar relaciones a partir de consultas

Crear la relación de compañeros de trabajo «coworkers» para las personas que trabajen en la misma compañía.

MATCH 
  (p1:Person)-[r1:WORK_AT]->(c:Company),
  (p2:Person)-[r2:WORK_AT]->(c:Company)
CREATE (p1)-[r3:COWORKERS]->(p2)
RETURN p1,p2,c,r1,r2,r3

Ejemplo avanzado2 - neo4j visualización tabla

Ejemplo 3: Agrupaciones

Para cada persona agrupar por sectores en que trabajan sus amigos

MATCH (p1:Person)-[:FRIEND_OF]->(p2:Person)-[:WORK_AT]->(c:Company)
RETURN p1.name, COLLECT(c.sector)

Ejemplo avanzado3 - neo4j visualización tabla