una datos crear como neo4j cypher graph-databases

crear - ¿Cómo escribir una consulta Cypher con una condición en una de las propiedades de relación en la base de datos Neo4j?



como crear una base de datos en neo4j (2)

Mi pregunta:

Soy nuevo en Neo4j e intento crear una consulta que liste los nodos y las relaciones en un gráfico con la palabra clave "id = 0001" como se muestra a continuación:

(a) - [id: ''0001'', ref_id: null] -> (b) - [id: ''0002'', ref_id: ''0001''] -> (c) - [id: ''0003'', ref_id: '' 0002 ''] -> (d)

Start Node será (a) ya que tiene relación con id = 0001

Pero la base de datos también existe relaciones que no quiero:

(a) - [id: ''2001'', ref_id: nulo] -> (b) - [id: ''2002'', ref_id: ''2001''] -> (c)
(a) - [id: ''3001'', ref_id: nulo] -> (b) - [id: ''3002'', ref_id: ''3001''] -> (c)

El resultado solo debe incluir:

(a) - [0001] - (b) - [0002, 0001] - (c) - [0003,0002] - (d)

Debajo están lo que estaba pensando antes de escribir una pregunta:

Sé cómo crear esta consulta en una base de datos SQL como Oracle y MySQL, puedo usar la consulta con la condición "donde". Por ejemplo:

Select * from table_a parent, (select * from table_a) child where child.ref_id = parent.id

Luego puedo recorrer el conjunto de resultados en Java para encontrar todas las relaciones. Pero esto es estúpido.

Creo que la consulta debería verse así:

Match (n)-[r:RELTYPE]->(m) WHERE {some conditions at here} RETURN n,r,m

Por favor, ayúdame, ¡gracias!

Yufan


Puede usar relaciones con nombre y filtrar en la cláusula WHERE :

match p = (a)-[r1:TYPE]->(b)-[r2:TYPE2]->(c) where r1.id=''0001'' and r2.id=''0002'' and r2.ref_id=''0001'' return p

Tenga en cuenta que las propiedades que tienen un valor nulo no están permitidas en Neo4j. Entonces la primera relación no tendrá un ref_id .

Para la notación anterior es un atajo al poner las condiciones en el match :

match p = (a)-[r1:TYPE {id:''0001''}]->(b)-[r2:TYPE2 {id:''0002'', ref_id:''0001''}]->(c) return p

En una nota al margen : no estoy seguro de si la forma en que usa id y ref_id en propiedades de relación es una buena manera de modelar sus datos. Tal vez puedas usar tipos de relación más detallados, sin embargo, sin entender el dominio no es posible dar un buen consejo aquí.


Estoy usando esta consulta Cypher para encontrar todos los vecinos con profundidad = 3.

MATCH (a)-[r1]-(b)-[r2]-(c)-[r3]-(n) WHERE n.APPLE_ID=''12345'' RETURN distinct n, distinct r3

Gracias