【问题标题】:Neo4j: Usage of parameters of type listNeo4j:列表类型参数的使用
【发布时间】:2020-05-07 02:37:08
【问题描述】:

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

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    看来neo4j 4确实有问题,很高兴看到你已经为此提交了issue。

    我找到了 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
      

    【讨论】:

    • 这两种解决方法确实有效。谢谢,希望早日解决。 Aso,它可以通过从 python 代码中传递一个映射来解决。 {下:100,上:200}。
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多