#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)