3

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

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.checkagainstlike的值时

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

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

任何解决方法的建议?

4

1 回答 1

1

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

以下(部分)查询应仅生成所有节点都具有该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]))
于 2017-07-28T17:22:07.970 回答