Итак, вы начинаете с определенного узла C, вам нужно пройти назад и получить узлы: TABLE, которые действуют как источники, но только те, которые отфильтрованы по свойству списка в C.
Это должно работать:
MATCH (c)
WHERE id(c) = 123 // standin for however you match to your starting node
WITH c, c.filter as allowed
MATCH (a:TABLE)-[:SOURCES*]->(c)
WHERE a.name in allowed
RETURN a
Если у вас много входных узлов, а TABLE (имя) уникально, мы можем изменить это, чтобы предварительно сопоставить возможные входные узлы, что позволит нам сравнивать узлы, а не сравнивать свойства:
MATCH (c)
WHERE id(c) = 123 // standin for however you match to your starting node
MATCH (a:TABLE)
WHERE a.name in c.filter
WITH c, collect(a) as allowed
MATCH (a:TABLE)-[:SOURCES*]->(c)
WHERE a in allowed
RETURN a