Один запрос Neo4j для рефакторинга отношений С и из

#neo4j #cypher #refactoring

Вопрос:

У меня есть 2 узла, где я хочу переместить все отношения «ТУДА» и » ИЗ » на второй узел. введите описание изображения здесь

//Это работает от
соответствия (с)<-[р:] так-(Ф {имя: ‘мяч(а)’}), (т {имя: ‘мяч(Б)’})
, С С, Р, Ф, Т
, позвоните Апок.рефакторинг.с(р, т)
урожайность ввода, вывода
возвращают c

//И это работает, чтобы
соответствовать (С)-[Р:й]->(F в {название: ‘мяч(а)’}), (т {имя: ‘мяч(Б)’})
, С С, Р, Ф, Т
, позвоните Апок.рефакторинг.к(р, т)
урожайность ввода, вывода
возвращают c

//Это не работает
соответствия (с)-[р:й]->(F в {название: ‘мяч(а)’})-[С2:есть]->(Д), (т {имя: ‘мяч(Б)’})
, С С, Р, Ф, Т, Р2, д
звонка Апок.рефакторинг.к(р, т)
звонок Апок.рефакторинг.с(Р2, т)
урожайность ввода, вывода
возвращают c

Я получаю ОШИБКУ: «Вызов процедуры внутри запроса не поддерживает неявное присвоение имен результатам».

Как я могу выполнить рефакторинг отношений и отношений в одном запросе?

Комментарии:

1. Можете ли вы попробовать поставить второй раз WITH c, r, f, t, r2, d между CALL apoc.refactor.to(r, t) и CALL apoc.refactor.from(r2, t) ?

2. все равно получаю ту же ошибку 🙁

3. Пожалуйста, проверьте мой ответ.

Ответ №1:

Пожалуйста, попробуйте это:

 MATCH (c)-[r:HAS]->(f {name: 'ball(a)'})-[r2:HAS]->(d), (t {name: 'ball(b)'})
WITH c, r, t, r2, d
CALL apoc.refactor.to(r, t) 
YIELD input, output
WITH c, r2, t
CALL apoc.refactor.from(r2, t)
YIELD input, output
Return c
 

Номер строки 3 — это функция, которая принимает входные r, t данные и в результате возвращает input, output . Внутри этого return у вас нет r2 и t, поэтому вы получаете сообщение об ошибке.

Комментарии:

1. ТЫ КРУТ!! Спасибо!