Удалите все узлы и отношения в neo4j 1.8


92

Я знаю, что многие люди уже задают этот вопрос
для моего исследования, вот несколько вопросов, которые задавали раньше.

  1. Как удалить все отношения в графе neo4j?
  2. https://groups.google.com/forum/#!topic/neo4j/lgIaESPgUgE

Но в конце концов, все еще не можем решить наши проблемы,
мы просто хотим удалить «ВСЕ» узлы и «ВСЕ» отношения.

введите описание изображения здесь

предположим, что удалить "ВСЕ", можно увидеть, что осталось 0 узлов 0 свойств и 0 отношений

Это скриншот, который я сделал после удаления "ВСЕ", предложенного форумом.

Мой вопрос все тот же, как удалить все узлы и все отношения в neo4j

Ответы:


248

Начиная с 2.3.0 и до 3.3.0

MATCH (n)
DETACH DELETE n

Документы

До 2.3.0

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

Документы


2
хотя этот пример в документации Neo4j говорит: «Этот запрос не для удаления больших объемов данных, но хорош при игре с небольшими примерами данных». Интересно, лучше ли выполнить MATCH () - [r] - () DELETE r, а затем выполнить MATCH (n) DELETE n
— Джордж Бирбилис

2
@GeorgeBirbilis, чтобы сделать это с большими объемами данных, операция должна быть разбита на несколько транзакций и должны быть реализованы механизмы повторной попытки.
— Bob B

1
не уверен, нужна ли повторная попытка, но для итеративного способа сделать это см. ответ Стефана Армбрастера на stackoverflow.com/questions/29711757/… (я также упоминаю об этом в конце ссылки на сообщение в моем блоге, которая есть у меня в отдельном ответе)
— Джордж Бирбилис

Ответ-запрос 2.3 мне не подходит. Предложение @GeorgeBirbilis делает.
— aliteralmind

@aliteralmind, судя по neo4j.com/docs/2.3.0/query-delete.html, вероятно, проблема в том, что после) требуется новая строка или, по крайней мере, пробел, поскольку в настоящее время он пишет ...) DETACH, который выглядит как опечатка (а также, возможно, сохранить DETACH DELETE в той же строке, но не уверен, требуется ли это). Обратите внимание, что в статье по-прежнему говорится: «Этот запрос не для удаления больших объемов данных, но удобен при игре с небольшими примерами наборов данных».
— Джордж Бирбилис

6

вы, вероятно, делаете это правильно, только на панели инструментов отображается только взятый более высокий идентификатор и, следовательно, количество «активных» узлов и связей, хотя их нет. это просто информативно.

чтобы убедиться, что у вас пустой график, выполните эту команду:

START n=node(*) return count(n);
START r=rel(*) return count(r);

если оба дают вам 0, ваше удаление прошло успешно.


да, это правда, но на приборной панели не отображается ни более высокий, ни самый высокий ID
— Хуэй Тан

да, именно так они это запрограммировали - поскольку, когда у вас есть кластер с миллиардами узлов, вы не хотите считать их вручную. но где-то я видел, как кто-то углубился в это и сделал какое-то исправление javascript, может быть, если вам повезет, вы погуглите сообщение.
— ulkas

5

для большой базы данных вы должны либо удалить базу данных с диска (я думаю, сначала после остановки движка), либо использовать в Cypher что-то вроде:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount

см. https://zoomicon.wordpress.com/2015/04/18/howto-delete-all-nodes-and-relationships-from-neo4j-graph-database/ для получения дополнительной информации, которую я собрал по этому поводу из различных ответов


3

Neo4j не может удалять узлы, имеющие отношение. Прежде чем удалять узлы, необходимо удалить отношения.

Но это простой способ удалить «ВСЕ» узлы и «ВСЕ» отношения с помощью простого шипера. Это код:

МАТЧ (n) DETACH DELETE n

-> DETACH DELETE удалит все узлы и отношения по Match


0

если имя узла, например: abcd, то запрос ниже будет работать:

MATCH (n:abcd)
DETACH DELETE n

Это удалит только узел с меткой «abcd» и все его отношения.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.