我正在尝试创建一个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
语句,我就无法运行查询。
谢谢!
答案 0 :(得分:0)
WITH
子句是必需的,因为您在执行变异操作后执行了另一个MATCH
。 WITH
语句有效地分区查询中的不同子句。每个子句就像是管道中的一个步骤。只有WITH
语句中的标识符才会传递到下一部分。
如果您想在没有WITH
声明的情况下实现此目的,您可以执行此操作。在这种情况下,因为每个MATCH
和MERGE
可能只有一个结果。但是如果每个语句有多个结果(即不止一个 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)