Удалите все узлы и отношения в 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.