Cypher查询动态匹配apoc调用中的参数

时间:2017-07-28 16:57:39

标签: neo4j cypher neo4j-apoc

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

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通话有效。不确定这是否是预期的行为?

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

1 个答案:

答案 0 :(得分:1)

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]))