GraphGists

Ejercicio con Cypher y Neoj4

Script de creación

Grafo completo:

Consultas

Consultas elementales

  • Devuelve todos los animales macho del zoológico.

match (n:Animal{sexo:"Macho"})
return n

Resultado:

  • Devuelve la cantidad de empleados que tengan más de 40 años.

match(empleado:Empleado)
where empleado.edad > 40
return count(empleado) as `Cantidad empleados`

Resultado:

Consultas intermedias

  • Devuelve todos los animales que compartan el mismo veterinario que Tadala.

Match(animal:Animal{name:"Tadala"})<-[:SE_ENCARGA_DE]-(veterinario:Empleado{puesto:"Veterinario"})
With veterinario
Match (veterinario)-[:SE_ENCARGA_DE]->(animal2:Animal)
Where animal2.name <> "Tadala"
Return animal2

Resultado:

  • Devuelve las crías de animales de las cuales se encarga la empleada llamada Clara.

Match (cuidador:Empleado{name:"Clara"})-[:SE_ENCARGA_DE]->(recinto:Recinto)<-[:HABITA]-(cria:Animal)-[:ES_HIJO_DE]->(animal:Animal)
Return distinct(cria)

Resultado:

  • Devuelve las crías que no tienen un veterinario asignado.

Match (animal:Animal)<-[:ES_HIJO_DE]-(cria:Animal)
Where not (:Empleado{puesto:"Veterinario"})-[:SE_ENCARGA_DE]->(cria)
Return distinct(cria)

Resultado:

Consultas avanzadas

  • Devuelve los animales que son cuidados por los mismos cuidadores que se encargan de Canela y que, además, pertenezcan a un recinto diferente. También devuelven los recintos en los que habitan.

match (animal:Animal{name:"Canela"})-[:HABITA]->(recinto:Recinto)<-[:SE_ENCARGA_DE]-(cuidador:Empleado{puesto:"Cuidador"})
with animal, recinto, cuidador
match (animal2:Animal)-[:HABITA]->(recinto2:Recinto)<-[:SE_ENCARGA_DE]-(cuidador)
where animal2.name <> "Canela"
and recinto <> recinto2
return distinct(animal2), recinto2

Resultado:

  • Devuelve la media de edad de los animales agrupados en especies que tengan pareja, con un veterinario asignado cuyo nombre contenga la letra 'o' y que, además, habiten en un recinto en estado disponible.

match (recinto:Recinto)<-[:HABITA]-(animal:Animal)-[:ES_PAREJA_DE]->(animal2:Animal)-[:HABITA]->(recinto:Recinto)
where recinto.estado = "Disponible"
with animal, animal2
match (veterinario:Empleado{puesto:"Veterinario"})
where((animal)<-[:SE_ENCARGA_DE]-(veterinario)
or (animal2)<-[:SE_ENCARGA_DE]-(veterinario))
and veterinario.name CONTAINS 'o'
return distinct labels(animal)[1] as Especie, avg(animal.edad) as `Edad media`

Resultado: