Создание новых связей из path (neo4j)

#neo4j #cypher

#neo4j #cypher

Вопрос:

Я пытаюсь построить новую связь из возвращаемого пути allshortpath.

 $
MATCH (p1:Category {catName: "Main_topic_classifications"}), 
(p2:Category {catName: "Monarchs_of_the_Bulgars"}),
path = allShortestPaths((p2)-[:SUBCAT_OF*]->(p1))

FOREACH (s IN rels(path) | 
  MERGE (startNode(s))-[:NEW_SUBCAT]->(ENDNODE(s)))
  

Однако, когда я запускал этот предыдущий запрос, я получил эту ошибку:

 Neo.ClientError.Statement.SyntaxError: Invalid input '(': expected an identifier character, whitespace, NodeLabel, a property map or ')' (line 5, column 24 (offset: 248))
"      MERGE (:startNode(s))-[:NEW_REL]->(:ENDNODE(s)))"
                                          ^
  

Ответ №1:

Язык Cypher не позволяет шаблону узла содержать функцию, которая возвращает узел (хотя это было бы очень удобно).

Этот запрос (который сначала создает переменные узла s и e , чтобы их можно было использовать в шаблонах узлов) должен сработать для вас:

 MATCH
  (p1:Category {catName: "Main_topic_classifications"}), 
  (p2:Category {catName: "Monarchs_of_the_Bulgars"}),
  path = allShortestPaths((p2)-[:SUBCAT_OF*]->(p1))
UNWIND RELATIONSHIPS(path) AS rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)