Создать новые отношения из результата запроса neo4j - PullRequest
0 голосов
/ 05 мая 2019

Я хочу построить новые отношения из результата кратчайшего пути между узлом и набором узлов. В настоящее время я использую этот запрос для выполнения такой задачи, но между двумя узлами (это работает очень хорошо):

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)

Как я могу обобщить этот запрос, чтобы вернуть список allshortestPaths между p2 ("Monarchs_of_the_Bulgars") и списком узлов p1 = ["Health", "History", "Humanity"] вместо одного узла, такого как предыдущий запрос?

Спасибо за помощь.

1 Ответ

1 голос
/ 06 мая 2019

Это должно работать:

MATCH (p1:Category)
WHERE p1.category IN ["Health", "History", "Humanity"]
MATCH
  (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)

[ОБНОВЛЕНО]

Если p1 также должен быть непосредственным подкадром Top_Main_Classification, то вы можете сделать это:

MATCH (p1:Category)-[:SUBCAT_OF]->(main:Category {catName: "Main_topic_classifications"})
WHERE p1.category IN ["Health", "History", "Humanity"]
MERGE (p1)-[:NEW_SUBCAT]->(main)
MATCH
  (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...