密码查询以动态匹配 apoc 调用中的参数

Cypher query to dynamically match parameter in apoc call

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

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调用里面依赖"information from the query memory",因为当我手动填写mnode.checkagainst的值时喜欢

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

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

有什么解决方法的建议吗?

如果 mnode 缺少 checkagainst 属性.

apoc.date.toYear($data[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]))