Уменьшите с пониманием шаблона / избегая необязательного соответствия на нулевом узле - PullRequest
0 голосов
/ 07 мая 2019

Как установить свойство как итерацию связанных свойств узлов на узлах, которые являются результатом моих операторов в foreach, который следует за необязательным соответствием?

Я заменяю старые узлы новыми узлами, и соответственноизменение идентификатора узлов, которые были связаны со старым узлом.Идентификатор представляет собой конкатенацию связанных новых узлов.

Я попытался с двумя последующими необязательными совпадениями, но боюсь, что если первое вернется к нулю, то второе совпадет с ВСЕМ, что может стать проблемой мухо.

 MATCH (old), (new)
 ...bunch of stuff...
 WITH old, new
 OPTIONAL MATCH (old)-[oldrel:HAS]->(parent)
 FOREACH (o IN CASE WHEN parent IS NOT NULL THEN [parent] ELSE [] END|           
 MERGE (new)-[newrel:HAS]->(parent)
 DELETE oldrel
 SET parent.newID=[(parent)<-[:HAS]-(children) | REDUCE(iterate="", child IN children |  iterate + "," + child.Property1+child.Property2)] )

также пытался, но проблематично, когда родительский нуль ...

 MATCH (old), (new)
 ...bunch of stuff...
 WITH old, new
 OPTIONAL MATCH (old)-[oldrel:HAS]->(parent)
 FOREACH (o IN CASE WHEN parent IS NOT NULL THEN [parent] ELSE [] END| MERGE (new)-[newrel:HAS]->(parent))
 DELETE oldrel
 WITH old, new, parent
 OPTIONAL MATCH (parent)<-[:HAS]-(children)
 SET parent.newID=REDUCE(iterate="", child IN children |  iterate + "," + child.Property1+child.Property2)

Желаемый результат:

, если oldchild 1 имеет свойство 1: 3 и свойство 2: X

и newchild 1 имеет свойство 1: 9 и свойство 2: Y

, затем родительский ID1 переключается с 3X, 5Q на 5Q, 9Y (в идеале отсортированный таким образом)

и родительский ID2переключается с 0P, 3X, 6S на 0P, 6S, 9Y (в идеале, сортируется таким образом)

, если у old нет родителя, то ни у одного узла не поменялись местами ID

1 Ответ

0 голосов
/ 07 мая 2019

Это может работать для вас:

MATCH (old), (new)
...bunch of stuff...
WITH old, new
MATCH (old)-[oldrel:HAS]->(parent)
MERGE (new)-[newrel:HAS]->(parent)
DELETE oldrel
WITH parent, new
OPTIONAL MATCH (parent)<-[:HAS]-(child)
WHERE child <> new
WITH parent, COLLECT(child) + new AS children
SET parent.newID=
    REDUCE(iterate="", child IN children |
      iterate + "," + child.Property1+child.Property2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...