В Cypher я могу проверить, является ли свойство списком, прежде чем обновлять его значение

#neo4j #cypher

Вопрос:

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

СОВПАДЕНИЕ (a:часть) ГДЕ НЕ СУЩЕСТВУЕТ((a.сериалы)[0]) УСТАНОВИТЕ a.сериалы=[] верните a

но это просто выдает ошибку.

есть идеи?

Ответ №1:

У Cypher нет встроенной функции для этого , но вы можете использовать небольшой хак, который проверяет, увеличит ли добавление элемента в свойство его размер на 1, например

 MATCH (n:Award)
RETURN size(n.years   11) = size(n.years) 1 AS isList
 

подписывайте, добавляйте элементы, объединяйте или суммируйте. Поэтому, чтобы отличить строку a от массива, нам нужно добавить две цифры.

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

1. Почти приехали ! Но очень интересный трюк ! СОВПАДЕНИЕ (n:Награда) РАЗМЕР ВОЗВРАТА(n.лет 11) = размер(n.лет) 1 В списке

Ответ №2:

Вам нужно будет использовать библиотеку APOC для проверки типа свойства:

 MATCH (a:part) 
WHERE NOT  apoc.meta.isType(a.serials) = "LIST"
SET a.serials=[] 
return a
 

Вы можете проверить документы для получения дополнительной информации: https://neo4j.com/labs/apoc/4.1/overview/apoc.meta/apoc.meta.isType/

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

1. мы искали что-то без APOC, но я не думаю, что мы что-нибудь получим. Поэтому я проверяю это как правильный ответ !