Запрос шифра для динамического сопоставления параметра в вызове 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']))

вызов апок работает. Не уверены, является ли это предполагаемым поведением?

Любые предложения по обходному пути?


person tscherg    schedule 28.07.2017    source источник


Ответы (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]))
person cybersam    schedule 28.07.2017