Neo4J / APOC - 在调用存储过程`apoc.cypher.doIt`

时间:2017-05-09 20:30:54

标签: stored-procedures neo4j cypher graph-databases neo4j-apoc

我正在运行以下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子句之后继续查询?

提前致谢!

1 个答案:

答案 0 :(得分:3)

这里的问题是,由于在apoc.cypher.doIt()中执行的密码不会返回任何行,因此YIELD不会产生任何结果。您可以通过使用RETURN value替换最后的CREATE来确认这一点:无更改,无记录。

没有要操作的行,并且所有操作都是按行执行的,因此CREATE永远不会被执行,没有行可以运行它。

您需要在已执行的密码中返回一些内容,return true或其他内容。

请始终关注查询在查询的各个阶段生成的行数,因为您的操作(匹配,创建等)将执行与行数相同的次数。