DETACH DELETE будет полезен здесь. Сначала удаляются все отношения с узла, а затем удаляется сам узел. Это упрощает ваш запрос, поскольку все, что вам нужно, это запрос для всех узлов, доступных из вашего узла b.
Я собираюсь предположить, что данный узел b
в вашем вопросе является конкретным узлом, а не каждым узлом с меткой :b
. Я рекомендую вам перечитать документацию разработчика по переменным и меткам, так как я предполагаю, что здесь немного путаницы.
Итак, предполагая определенный узел b и предполагая, что он имеет свойство имени, которое его отличает, вы можете использовать этот запрос для его удаления и весь подключенный к нему подграф и доступный из него.
MATCH (b:b)-[*0..]-(x)
WHERE b.name = 'b'
WITH DISTINCT x
DETACH DELETE x
Обратите внимание, что, потому что мы не заботимся о типе отношений, и потому, что мы указали 0 или больше отношения, х будет соответствовать к б и его весь связный подграф, независимо от того, сколько отношения прочь. Отсоединение и удаление x удалит все отношения в подграфе, а затем все узлы в подграфе.
Обратите внимание, что если вы опускаете двоеточие в Cypher, вы указываете _variable_, а не _label_. Следовательно, ваш запрос не только удаляет '(: a) - [: r] -> (: b)' подграфы, а все '(...) - [...] - (: b)' подграф, где исходный узел и ребро могут иметь произвольные метки. Вместо этого вам понадобится 'MATCH (a: a) - [r: r] -> (b: b) DELETE a, r, b' –
Просто для уточнения, существует ли определенный узел' b', который вы хотите удалить (а также связанный с ним подграф), или вы хотите сделать это для всех узлов с меткой ': b'?Если вы хотите удалить только определенный узел 'b' и его подграф, что отличает этот узел от других:' 'b? Это свойство 'name'? Другое свойство? – InverseFalcon
@InverseFalcon Да, существует определенный узел ': b', и он имеет свойство с уникальным значением индекса. Извините за путаницу; Я попытался сделать пример кода максимально простым (но, очевидно, это было слишком просто!) – inersha