Я использовал это для создания вашего примера графика:
CREATE (A:Object{name:'ABC'})-[:PART_OF]->(B:Object{name:'DEF'})-[:PART_OF]->(C:Object{name:'GHI'}),
(D:Object{name:'JKL'})-[:PART_OF]->(E:Object{name:'MNO'})-[:PART_OF]->(F:Object{name:'PQR'})-[:PART_OF]->(G:Object{name:'STU'})
CREATE (C)-[:JOINED_TO]->(G)
И я использовал это для запроса графика:
MATCH (ob1:Object{name:'DEF'}) - [:PART_OF*] -> (ob2:Object) - [:JOINED_TO] - (ob3:Object) <- [:PART_OF*] - (ob4:Object{name:'PQR'})
RETURN ob2, ob3
Это правильно возвращает два узла с именами 'GHI'и 'STU'.
Этот запрос не будет возвращать "C" или "G", потому что вы никогда не сохраняли это на своем графике. В вашем запросе на создание «C» и «G» (и все остальные отдельные буквы) являются переменными для рассматриваемых узлов. Переменные не сохраняются в базе данных и не сохраняются после завершения запроса. Они предназначены для адресации вещей (узлов, отношений, значений и т. Д.) На протяжении всего запроса, но не после него.
Если вы хотите, чтобы запрос возвращал «C» и «G», вам следует сохранитьони являются дополнительными свойствами узлов и возвращают эти свойства в ВОЗВРАТ.
Вот документация для переменных из руководства разработчика Cypher.