Cypher — удалить все свойства с определенным значением

#neo4j #cypher

#neo4j #cypher

Вопрос:

Я ищу способ удалить каждое свойство любого узла в БД, имеющее определенное значение, используя Cypher.

Контекст
Я получил массовый файл csv из реляционной таблицы с большим количеством нулевых значений. LOAD CSV возвращает их как значения. Их удаление (замена их на «пустые» в файле csv) привело к той же проблеме (свойства без значений). Пробовал много (много) Операции шифрования для удаления нулевых значений, но ничего не сработало.

Ничего не могу найти в документах ни с помощью Google. Можно ли это сделать, используя только Cypher? Мне кажется, что это (пока) не поддерживается.

Спасибо.

Комментарии:

1. Вы не знаете имена свойств? Что бы вы ни делали, когда заменяли нулевые значения пустыми строками (вы, должно быть, каким-то образом подобрали правильные узлы и свойства), можете ли вы сделать это снова, но REMOVE n.property вместо SET n.property = '' ?

2. Я заменил «NULL» на » в файле csv (найти и заменить). Я сказал, что, возможно, Cypher обнаруживает пустые строки и пропускает соответствующие атрибуты, но это было не так.

3. Итак, вы хотите удалить любое свойство на любом узле, которое является пустой строкой?

Ответ №1:

Как насчет этого (когда вы знаете имена свойств):

 MATCH (n:Label)
WHERE n.property = ''
REMOVE n.property;

MATCH (u:User) 
WHERE u.age = '' 
SET u.age = null;
  

Если вы знаете, какие столбцы они есть в вашем импорте, вы можете сделать что-то вроде этого

 load csv with headers from "" as line
with line, case line.foo when '' then null else line.foo end as foo
create (:User {name:line.name, foo:foo})
  

Это не создаст свойства с null.

Для числовых значений это проще, так как toInt() и toFloat() возвращают null для неразличимых значений типа «.

Комментарии:

1. Столбцов много, было бы сложно выполнить работу для каждого из них. Но поскольку другого способа нет, я соглашусь. Спасибо @Michael. Кстати, я ценю ваши заметные усилия в SO и группе Google.

2. Используйте выбранный вами язык программирования, чтобы перебрать строку заголовка вашего CSV и сгенерировать необходимые операторы CASE.

Ответ №2:

Нет, нет способа сделать это только с помощью chypher. Я полагаю, что вы уже видели способ сделать это с помощью REST. На данный момент это лучшее решение.

Комментарии:

1. Нет, я еще не играл с запросами REST, но это не ответило на вопрос. Как указать значение свойств для удаления? Например. удалить все свойства с «foo» в качестве значения?

2. Я думаю, что вопрос заключается в удалении свойств, имеющих определенное значение, независимо от того, на каком узле они находятся, а не в удалении всех свойств на узле. Чтобы удалить все свойства на узле n с помощью cypher, вы можете использовать SET n = {} .