简体   繁体   中英

Find all Nodes and Relations up to a defined path length within Neo4j using Cypher

I'm stuck with a problem returning all nodes and relationships within the following pattern:

(a:LABEL_A)-[:REL_A]->(x:LABEL_B)-[r:REL_B*1..n]->(y:LABEL_B)<-(b:LABEL_A)
WHERE a.prop IN [Array of Strings] AND b.prop IN [Array of Strings]

The "Array of Strings" at both ends of the path is the same. The result I'm looking for is a list of all the paths in-between a group of nodes up to a defined depth with all the properties of the "in-between" nodes and the properties of the "in-between" relationships

The result I'm struggling to achieve is shown in the following structure:

a.prop, x.prop, r.prop, y.prop, b.prop : in the case the path length is 1

up to...

a.prop, x.prop, r(1).prop, in-between_node(1).prop, r(2).prop, in-between_node(2).prop, ..., y.prop, b.prop : in the case the path length is n

Is there an easy way to create this as a simple list output?

Any tip greatly appreciated

Krid

It sounds like you just want to get the path s that match your pattern. Each path contains all the nodes and relationships (and their properties), in path order. For example, this query:

WITH ['b','c'] AS arrayOfStrings
MATCH path=(a:LABEL_A)-[:REL_A]->(x:LABEL_B)-[r:REL_B*1..5]->(y:LABEL_B)<--(b:LABEL_A)
WHERE a.prop IN arrayOfStrings AND b.prop IN arrayOfStrings
RETURN path;

will return a result such as this (where only one path was found):

+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| path                                                                                                                                                               |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| (:LABEL_A {prop: "c"})-[:REL_A {foo: "bar"}]->(:LABEL_B {foo: "baz"})-[:REL_B {fie: "foe"}]->(:LABEL_B {foo: "bax"})<-[:REL_A {foo: "fop"}]-(:LABEL_A {prop: "b"}) |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM