Hi guys, i trying to solve this all the week but i not able to do it. I have this graph:

I whould like to find for each blue node (:node4G) what is the shortest peering brown node (:peering). Then, extract the shortestpath in order to add on each link the customers added by each (:node4G) along the path until reaching the peering node.

I'm trying different approaches, but I'm not able to find a solution even for the first part of the problem:

I have extract all the paths between nodes, but idk how to keep only the closest (:peering) node, i always get 2 paths per (:Node4G) to their respective peering,

```
MATCH (a:Node4G), (b:peering), p = ((a)-[:link*]-(b))
WITH min(length(p)) as closest, a,b,p
WHERE length(p)= closest
RETURN a.name, length(p),b.name
```

I tried different approach, match all (:Node4G) and iterate over them to get the paths and only keep the closest, but i see that i can't perform a MATCH/ORDER inside FOREACH clause

```
MATCH (a:Node4G)
WITH collect(a) as nodes
FOREACH (access_node IN nodes |
MATCH (access_node),(b:peering), p = ((access_node)-[:link*]-(b))
ORDER BY lenght(p) LIMIT 1
RETURN access_node.name,b.name, length(p)
)
```

Another attempt, using shortestpath and trying to iterate over the result paths, but same problem again, i get two paths per (:node4G) and i need to add the customers figure only on the shortest path

```
MATCH (a:Node4G), (b:peering), p = shortestPath((a)-[:link*]-(b))
WITH collect(distinct p) AS paths,a
FOREACH (mypath IN paths |
FOREACH (r IN relationships(mypath) |
SET r.customers = toInteger(r.customers) + toInteger(a.customers)))
RETURN paths
```

If i get the solution to filter this path, i guess that using later a FOREACH clause i'll be able to set the customers property along the path using SET command on each segment of the path.

I'm sure that this is a trivial problem i would have liked to solve myself, but i'm spending so much time on this and i dont know how to make progress.

Thank you so much for your help!