我有一些我不理解的 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
会与序列一起返回。
为什么?