使用“CALL apoc.do.when()”进行密码查询时,不会出现无效的输入“p”

问题描述 投票:0回答:1

我的密码查询没有收到以下错误(如下引用):

Invalid input 'p': expected 
    'n/N' or 's/S' 
    (line 1, column 116 (offset: 115))

"OPTIONAL MATCH (m:MeasurementSite)-[*2]-(v:Val) 
    WHERE ID(m) = $meter 
    AND v.d < $end 
    AND v.d > $start 
    WITH v, CALL 
        apoc.do.when(v IS NOT NULL, 
            'RETURN abs(toInteger(apoc.temporal.format(duration.inDays($date, $d), \'dd\')))', 
            'RETURN null',
            {d: v.d, date: $date}) AS dist 
    RETURN v, dist;"

引用的

p
apoc
中的第二个字符。

CALL
的链接在这里。有人知道这个问题吗?它与(错误的)报价有关吗?

似乎您可以使用

CALL apoc.do.when()
启动查询,但不能在查询中间的某个位置使用它。

正在开发版本 4。

cypher
1个回答
0
投票

CALL
子句用于调用插件
procedures
(与
functions
),并且不能在其他子句中间调用。

但是,此外,您的

WHERE
子句无论如何都会过滤掉
v
值,因此您甚至不需要测试
v
是否为 NULL (并且您的
MATCH
不需要是
 OPTIONAL
)。

因此,这应该足够好了:

MATCH (m:MeasurementSite)-[*2]-(v:Val) 
WHERE ID(m) = $meter 
  AND v.d < $end 
  AND v.d > $start
RETURN v, {d: v.d, date: $date});
© www.soinside.com 2019 - 2024. All rights reserved.