我正在使用以下结构的查询
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通话有效。不确定这是否是预期的行为?
有关解决方法的任何建议吗?
答案 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]))