У меня есть график, состоящий из путей. Мне нужно удалить все узлы, которые имеют свойство: linksTo: 'javascript' После удаления я должен повторно подключить пути. Это означает, что мне нужно создать новые отношения для каждого пробела. Это отношение имеет свойство с именем deltaTime, которое содержит некоторое целочисленное значение. Это значение (deltaTime) должно быть суммой всех свойств deltaTime удаленных отношений этого пути. Пожалуйста, посмотрите следующую картинку для лучшего понимания. Я не знаю, как обнаружить несколько «плохих» узлов в строке с переменной длиной строки.Cypher - удалить узел с заданным свойством и восстановить граф
ответ
Это поможет, если вы можете предоставить ярлыки, используемые в вашем графике, а также типы отношений, которые вы используете.
Если предположить, что все эти пути цепь (только отдельные отношения, связывающие каждый узел), нечто подобное должно работать для вас:
// first, add a label on all the nodes we plan on deleting
// it helps if they already have the same label especially if linksTo property is indexed.
MATCH (n{linksTo:'javascript'})
SET n:ToDelete
С соответствующими узлами меченых, мы найдем сегменты узлов удаляемых , окружающие узлы, которые необходимо подключить, и создать новые отношения. Мы гарантируем, что a и b являются начальными и конечными узлами цепочки, гарантируя отсутствие: узлов ToDelete, связанных с a, или из b.
MATCH (a:ToDelete)
WHERE NOT (:ToDelete)-->(a)
AND()-->(a)
MATCH p = (a)-[rel*0..]->(b:ToDelete)
WHERE ALL(node in nodes(p) WHERE node:ToDelete)
AND NOT (b)-->(:ToDelete)
AND (b)-->()
WITH a, b, REDUCE(s = 0, r IN rel | s + r.value) as sum
// now get the adjacent nodes we need to connect
MATCH (x)-[r1]->(a), (b)-[r2]->(y)
WITH x, y, sum + r1.value + r2.value AS sumValue
// making up relationship type and property name as I don't know what you're using
MERGE (x)-[:Rel{value: sumValue}]->(y)
Наконец, когда вы уверены, что новые отношения выглядят правильно, удалите узлы, которые вам больше не нужны.
MATCH (n:ToDelete)
DETACH DELETE n
Это очень хороший ответ, и я уверен, что это может сработать. А есть поблем со второй частью. rel.value - это список отношений. SUM не может обрабатывать List
Хороший улов, забытый SUM() не будет работать над коллекциями. Один из способов: UNWIND сбор отношений, а затем использование SUM(), но в этом случае я заменил его REDUCE, который мы будем использовать для накопления суммы. – InverseFalcon
- 1. Удалить связанный граф с Cypher
- 2. Neo4j Cypher: скопировать отношения и удалить узел
- 3. Neo4j/Cypher удалить узел и Чайлдс с отношением
- 4. cypher neo4j перебирать граф, начиная с узла и заканчивая узлом
- 5. jstree: как восстановить/восстановить узел
- 6. Выберите элементы дочерних таблиц с заданным свойством
- 7. Как получить все элементы с заданным свойством?
- 8. граф и операции в Neo4j Cypher
- 9. cypher удалить узел и весь список связанного узла
- 10. Hibernate выберите элементы коллекции с заданным свойством
- 11. Удалить узел и отношения, используя запрос cypher по REST API
- 12. Cypher - получить последний узел
- 13. CoreData: Выбирает объект с заданным свойством И данное отношение?
- 14. граф и удалить VBA
- 15. Направленный граф - недоступный узел
- 16. Cypher: узел соответствия по необязательному/нулевому параметру
- 17. Neo4j Cypher поиск путь медленно неориентированного граф
- 18. граф-документы, которые соответствуют заданным критериям
- 19. Cypher Запрос не найдя узел
- 20. Определить узел с уникальным свойством в neo4django
- 21. XSLT Выберите последний узел с заданным значением
- 22. xpath: пропустить дочерний узел с заданным идентификатором
- 23. Возвратный узел Cypher с MAX (n.property)
- 24. Cypher: узел между двумя узлами
- 25. Удалить лот с заданным номером
- 26. Как удалить узел и связанные с ним узлы с помощью запроса Neo4j cypher?
- 27. Cypher: Узел не найден в одном запросе
- 28. Как удалить/удалить узел и отношения в Neo4j в java?
- 29. Поиск n-й ячейки в столбце с заданным свойством
- 30. Удалить и восстановить первичный ключ
Можете ли вы подтвердить, что все пути являются цепями, где каждый узел имеет только одно входящее отношение и одно исходящее отношение? Если это не так, то это может кардинально изменить запросы, которые будут работать. – InverseFalcon