Cypher - 创建两个顺序链接的语句

时间:2018-03-20 14:46:56

标签: neo4j cypher

我正在尝试创建一个cypher查询,允许我将父评论添加到父评论中。我已经编写了一些可行的密码,但我还想将作者的关系附加到新的子注释中,而我的代码不会这样做(除了创建子注释之外它没有做任何事情)。

这是我的代码:

MATCH (c:Comment{GUID:"01f6ffa4-b481-4495-9e9c-ffca6dcc510e"})
MERGE (cc:Comment{user: "John Doe", text:"TEST", timestamp: "now", actionId:apoc.create.uuid()})
MERGE (c)<-[:COMMENTED_ON]-(cc)
WITH cc AS comment
MATCH (u:User {name: "John Doe"})
MERGE (comment)<-[:ADDED]-(u)

字符串内的所有内容都是虚拟数据

我不是100%清楚我需要使用with语句,但是如果没有with语句,我就无法运行查询。

谢谢!

1 个答案:

答案 0 :(得分:0)

WITH子句是必需的,因为您在执行变异操作后执行了另一个MATCHWITH语句有效地分区查询中的不同子句。每个子句就像是管道中的一个步骤。只有WITH语句中的标识符才会传递到下一部分。

如果您想在没有WITH声明的情况下实现此目的,您可以执行此操作。在这种情况下,因为每个MATCHMERGE可能只有一个结果。但是如果每个语句有多个结果(即不止一个 John Doe ),那么它将导致更大的笛卡尔积,并可能产生意想不到的后果。

MATCH (u:User {name: "John Doe"})
MATCH (c:Comment {GUID:"01f6ffa4-b481-4495-9e9c-ffca6dcc510e"})
MERGE (cc:Comment {user: "John Doe", text:"TEST", timestamp: "now", actionId:apoc.create.uuid()})
MERGE (c)<-[:COMMENTED_ON]-(cc)
MERGE (cc)<-[:ADDED]-(u)