Neo4j:类型列表参数的使用

Neo4j:类型列表参数的使用,neo4j,cypher,Neo4j,Cypher,列表参数不能在neo4j 4中编制索引。无论何时尝试从list类型的参数中获取元素,都会引发以下错误: 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 DB模式:因果

列表参数不能在neo4j 4中编制索引。无论何时尝试从list类型的参数中获取元素,都会引发以下错误:

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

DB模式:因果聚类

重现问题的查询示例如下:

MATCH (user:User)
WHERE ($range[0] > user.id OR user.id > $range[1])
return user
limit 1
$range
是有问题的参数,其示例值为
[100200]


此错误在以前的neo4j版本3.5中不会发生,因为我们目前正在迁移到neo4j 4。它发生在neo4j浏览器中,并通过驱动程序。我目前使用的是python驱动程序1.7.6,似乎neo4j 4确实存在问题,我很高兴看到您已经为此提交了一份报告

我找到了两个解决方法(但希望问题很快得到解决):

  • 将列表值显式转换为正确的类型。例如,如果
    id
    值是整数:

    MATCH (user:User)
    WHERE TOINTEGER($range[0]) > user.id OR user.id > TOINTEGER($range[1])
    RETURN user
    LIMIT 1
    
  • 将列表值指定给变量,并改用变量:

    WITH $range[0] AS upper, $range[1] AS lower
    MATCH (user:User)
    WHERE upper > user.id OR user.id > lower
    RETURN user
    LIMIT 1
    

  • 这两个变通办法确实奏效了。谢谢,希望这件事能尽快解决。同样,它可以通过从python代码中传递一个映射来解决。{下:100,上:200}。