У меня есть требование пересечь все узлы и удалить все узлы (и их отношения и связанные узлы) на основе определенных критериев. Для целей тестирования (чтобы убедиться, что я могу удалить узлы во время перемещения), я пытаюсь просто удалить один узел в середине траверса и использовать другой обход, чтобы удалить все узлы и отношения, привязанные к этому узлу. Я могу удалить все узлы и отношения, но после этого я получаю IllegalStateException (Node удален), когда цикл возвращается к 1-му обходу. Можно ли удалить узлы/отношения во время прохождения? Если да, то какой эффективный способ пересечь все узлы и удалить некоторые узлы на этом пути. Заранее спасибо!# Neo4j Удаление узлов/отношений при обходе с использованием java API
private void traverseGivenNode(Node node, TraversalDescription friendsTraversal) {
for (Node currentNode : friendsTraversal.traverse(node).nodes())
{
if (currentNode.getProperty("name").equals("AAA")) {
deleteNodeAndItsConnections(currentNode);
}
}
}
private void deleteNodeAndItsConnections(Node currentNode) {
TraversalDescription traversal = graphDb.traversalDescription()
.breadthFirst()
.uniqueness(Uniqueness.NODE_PATH).evaluator(Evaluators.excludeStartPosition()).relationships(RelTypes.KNOWS, Direction.OUTGOING);
for (Node node : traversal.traverse(currentNode).nodes())
{
deleteNode(node);
}
deleteNode(currentNode);
}
private void deleteNode(Node node) {
Iterable<Relationship> allRelationships = node.getRelationships();
for (Relationship relationship : allRelationships) {
relationship.delete();
}
node.delete();
}
Пожалуйста, покажите ваши Cypher запросы. – cybersam
@cybersam Спасибо, что нашли время, чтобы прочитать мой вопрос. Я использую JAVA API для обхода. Я добавил пример кода Java. – user3564731