слить а где в neo4j - PullRequest
       22

слить а где в neo4j

0 голосов
/ 05 сентября 2018

У меня есть 3 узла со следующими свойствами и отношениями:

LocationNode : location,
PersonNode : fullName, 
CityNode: cityName
LocationNode<-[has_location]-(PersonNode)
PersonNode-[has_city]->(CityNode)

LocationNode - это старый узел, который необходимо удалить. Данные LocationNode должны быть перемещены в новый узел CityNode. Для всех PersonNode, имеющих отношение к LocationNode, мне нужно удалить это отношение и создать новое отношение с CityNode, где LocationNode.location = CityNode.cityName

ПРИМЕЧАНИЕ: CityNodes уже созданы в базе данных, нет необходимости создавать новый.

Я попробовал следующий запрос:

match (n:LocationNode)<-[r:has_location]-(j:PersonNode) delete r with n,j
merge (j)-[r2:has_city]->(h1:CityNode) where n.location = h1.cityName return j

Ошибка, которую я получил, состояла в том, что я не могу использовать условие WHERE при использовании MERGE. Кто-нибудь может сказать мне правильный запрос, который я могу использовать?

1 Ответ

0 голосов
/ 05 сентября 2018

Условие where нельзя использовать с merge. И поскольку узел CityNode существует, вам необходимо match его и merge связь между ним и PersonNode:

match (n:LocationNode)<-[r:has_location]-(j:PersonNode) delete r 
with n, j 
match (h1:CityNode) where n.location = h1.cityName
merge (j)-[r2:has_city]->(h1)
return j
...