Neo4j: Использование параметров списка типов - PullRequest
2 голосов
/ 06 мая 2020

Параметры списка не могут быть проиндексированы в neo4j 4. Всякий раз, когда вы пытаетесь взять элемент из параметра списка типов, выдается эта ошибка:

Neo.DatabaseError.General.UnknownError
Did not find any type information for expression ContainerIndex(Parameter(r,Any),SignedDecimalIntegerLiteral(0))

Версия Neo4j: 4.0.3

Операционная система: Ubuntu 18.04.3 LTS

Режим БД: Причинный кластер

Пример запроса для воспроизведения проблемы:

MATCH (user:User)
WHERE ($range[0] > user.id OR user.id > $range[1])
return user
limit 1

$range - это рассматриваемый параметр с примерным значением [100, 200]

Эта ошибка не возникает в предыдущей версии neo4j 3.5, так как в настоящее время мы переходим на neo4j 4. Это происходит в браузере neo4j и через драйверы. Я сейчас использую python драйвер 1.7.6

1 Ответ

2 голосов
/ 06 мая 2020

Кажется, что действительно существует проблема с neo4j 4, и я рад видеть, что вы уже отправили проблему для этого.

Я нашел 2 обходных пути (но надеюсь, проблема скоро будет исправлена):

  1. Явно преобразуйте значения списка в правильный тип. Например, если значения id являются целыми числами:

    MATCH (user:User)
    WHERE TOINTEGER($range[0]) > user.id OR user.id > TOINTEGER($range[1])
    RETURN user
    LIMIT 1
    
  2. Назначьте значения списка переменным и используйте вместо них переменные:

    WITH $range[0] AS upper, $range[1] AS lower
    MATCH (user:User)
    WHERE upper > user.id OR user.id > lower
    RETURN user
    LIMIT 1
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...