Как да замените връзка в Neo4j с помощта на Cypher?

Имам набор от релации, които искам да „заменя“, т.е. да създам нова, след което да изтрия старата, тъй като релациите са неизменни.

Първоначално предположих това:

MATCH paths=()-[:BRANCH]-()
FOREACH (old in relationships(paths) |
    WITH startNode(old) as n1, endNode(old) as n2
    MERGE (n1)-[new:CONTAINS]-(n2)
    SET new = old
    DELETE r
)

но ключовата дума WITH не е разрешена и трябва да можете да разберете как да присвоите локални променливи на началния и крайния възел.


person Byron Ruth    schedule 22.12.2013    source източник
comment
За разлика от форумните сайтове, ние не използваме Благодарности, или Оценявам всякаква помощ, или подписи в Stack Overflow. Вижте Трябва ли „Здравей“, „благодаря“, лозунгите и поздравите да бъдат премахнати от публикации?.   -  person rene    schedule 22.12.2013


Отговори (1)


Можете да използвате FOREACH отново, за да хакнете това WITH, например:

FOREACH (n1 in [startNode(old)]| ... // you now have an identifier n1 referring to startNode(old)

Ако това е само път с дължина 1, не съм сигурен обаче, че виждам стойността да го направя по този начин. Не можеш ли просто да направиш:

MATCH (n1)-[old:BRANCH]->(n2) 
CREATE (n1)-[new:CONTAINS]->(n2) 
DELETE old
person Eve Freeman    schedule 22.12.2013
comment
А, страхотно, благодаря. Последното е това, от което се нуждая в момента, но ще проуча първото. Склонен съм да забравя сходния характер на тези операции. - person Byron Ruth; 23.12.2013