我正在运行以下Cypher查询:
WITH "CREATE (test:Test {id: 1})" AS cypher
CALL apoc.cypher.doIt(cypher, {}) YIELD value
CREATE (test2:Test2 {id: 2})
之后,我运行MATCH (a) RETURN a
并看到只创建了一个带有Test
标签的节点。第二个CREATE
语句似乎没有运行。
如果我在Test2
之前创建CALL
,它会按预期创建节点。
任何人都可以解释为什么会发生这种情况,以及如何在此CALL
子句之后继续查询?
提前致谢!
答案 0 :(得分:3)
这里的问题是,由于在apoc.cypher.doIt()
中执行的密码不会返回任何行,因此YIELD不会产生任何结果。您可以通过使用RETURN value
替换最后的CREATE来确认这一点:无更改,无记录。
没有要操作的行,并且所有操作都是按行执行的,因此CREATE永远不会被执行,没有行可以运行它。
您需要在已执行的密码中返回一些内容,return true
或其他内容。
请始终关注查询在查询的各个阶段生成的行数,因为您的操作(匹配,创建等)将执行与行数相同的次数。