我正在使用以下结构的查询

MATCH path=((:Start)-[:NEXT*..100]->(n))
WHERE ALL(mnode IN nodes(path)
    WHERE mnode.minimum <= $data[mnode.checkagainst])

其中data类似于{checkparam1: 24}。这对我而言是:我要检查的最小值的参数名称位于节点中。

一切正常,但是当我构建apoc之类的东西时
MATCH path=((:Start)-[:NEXT*..100]->(n))
WHERE ALL(mnode IN nodes(path)
    WHERE mnode.minimum <= apoc.date.toYear($data[mnode.checkagainst]))

它告诉我
Failed to invoke function `apoc.date.toYears`: Caused by: java.lang.NullPointerException

我怀疑我不能依赖apoc调用中的“来自查询内存的信息”,因为当我手动填写mnode.checkagainst的值时
MATCH path=((:Start)-[:NEXT*..100]->(n))
WHERE ALL(mnode IN nodes(path)
    WHERE mnode.minimum <= apoc.date.toYear($data['checkparam1']))

apoc呼叫有效。不确定这是否是预期的行为?

有任何解决方法的建议吗?

最佳答案

如果任何apoc.date.toYear($data[mnode.checkagainst])缺少mnode属性,则checkagainst调用将产生该错误。

以下(部分)查询应仅生成所有节点都具有checkagainst属性的路径(并通过<=测试):

MATCH path=((:Start)-[:NEXT*..100]->(n))
WHERE ALL(mnode IN nodes(path)
  WHERE
    mnode.checkagainst IS NOT NULL &&
    mnode.minimum <= apoc.date.toYears($data[mnode.checkagainst]))

关于neo4j - 密码查询以动态匹配Apoc调用中的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45378806/

10-10 04:20