当存在其他变量时,Neo4j/Cypher 布尔值不会保留在WITH子句的范围内

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

我有一些我不理解的 Neo4j/Cypher 行为。

假设我们有一个空的 Neo4j 数据库。现在让我们执行一个具有模式匹配的查询,其计算结果为

false
:

    WITH [[0, 1, 2],[3, 4, 5]] as sequences
    UNWIND sequences AS sequence
    MATCH
        (m:Model {model_id: 0})
        -[:BeginSequence]->(n1:TokenIndex {token_index: sequence[0]})
        -[:NextToken]->(n2:TokenIndex {token_index: sequence[1]})
        -[:NextToken]->(n3:TokenIndex {token_index: sequence[2]})
        -[:EndSequence]->(t:Element)
    WITH COUNT(t) > 0  as node_exists
    return node_exists

现在假设我希望

WITH
子句也继承
sequence
并返回它

    WITH [[0, 1, 2],[3, 4, 5]] as sequences
    UNWIND sequences AS sequence
    MATCH
        (m:Model {model_id: 0})
        -[:BeginSequence]->(n1:TokenIndex {token_index: sequence[0]})
        -[:NextToken]->(n2:TokenIndex {token_index: sequence[1]})
        -[:NextToken]->(n3:TokenIndex {token_index: sequence[2]})
        -[:EndSequence]->(t:Element)
    WITH COUNT(t) > 0  as node_exists, sequence
    return node_exists, sequence

这不会按预期返回

false
sequence
。相反,当
sequence
包含在
WITH
子句中时,不会返回任何结果。

此外,如果模式确实匹配(图表中确实存在记录)

true
会与序列一起返回。

为什么?

neo4j cypher
© www.soinside.com 2019 - 2024. All rights reserved.