В вашем вопросе не указано, что у начального Category
должно быть входящее SUBJECT
отношение.Но так как ваш запрос фильтрует это, я предполагаю, что это требование.
Ваш запрос (немного ниже) был выполнен так, как вы хотите.
MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path = (start)-[:SUBCAT_OF*..4]->(:Category)
UNWIND RELATIONSHIPS(path) AS rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)
Примечание. Этот запросгарантирует, что между каждой отдельной парой start
и end
узлов будет существовать только одна NEW_SUBCAT
связь (даже если ваша БД имела несколько SUBCAT_OF
взаимосвязей между этой же парой).
Следующий альтернативный запрос может быть немного быстрее, так как он сначала отфильтрует дублирующиеся отношения (генерируемые шаблоном отношение переменной длины ):
MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path = (start)-[:SUBCAT_OF*..4]->(:Category)
UNWIND RELATIONSHIPS(path) AS rel
WITH DISTINCT rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)