如何在Neo4j Cypher中提供多个查询?

如何在Neo4j Cypher中提供多个查询?,neo4j,cypher,Neo4j,Cypher,我想在第二个查询中使用第一个查询的结果。我不知道如何在Cypher中执行此操作 当前代码 START user1=node:USER_INDEX(USER_INDEX = "userA") MATCH user1-[r1:ACCESSED]->docid1<-[r2:ACCESSED]-user2, user2-[r3:ACCESSED]->docid2 WHERE r2.Topic=r3.Topic RETURN distinct docid2.Label; STAR

我想在第二个查询中使用第一个查询的结果。我不知道如何在Cypher中执行此操作

当前代码

START user1=node:USER_INDEX(USER_INDEX = "userA") 
MATCH user1-[r1:ACCESSED]->docid1<-[r2:ACCESSED]-user2, user2-[r3:ACCESSED]->docid2 
WHERE r2.Topic=r3.Topic 
RETURN distinct docid2.Label;
START user1=node:USER\u INDEX(USER\u INDEX=“userA”)
匹配用户1-[r1:已访问]->docid1docd2
其中r2.Topic=r3.Topic
返回不同的docid2.标签;
我希望在WHERE子句中为同一docid2节点集检查不同的条件,并根据日期字段累积结果和执行order by。 我无法在同一事务中提供多个匹配和返回。 这就是我尝试使用两个不同的密码脚本并在第三个查询中组合它们的时候。这在塞弗有可能吗? 或者是否有编写自定义函数并调用它们的选项?
我们是否像存储的Gremlin脚本一样存储了Cypher脚本?

正如Michael在评论中提到的,您可以使用“with”语句将结果流式传输到其他语句中。不幸的是,您不能在“where”子句之后开始另一个语句。多个返回语句可能有点不合逻辑,但您可以在一个查询中执行多项操作,例如:

START x=node:node_auto_index(key="x")
with count(x) as exists
start y=node:node_auto_index(key="y")
where exists = 0
create (n {key:"y"})<-[:rel]-y
return n, y
START x=node:node\u auto\u index(key=“x”)
计数(x)为存在
开始y=节点:节点自动索引(key=“y”)
存在的位置=0

create(n{key:“y”})您可以研究它,它允许您将查询结果(也聚合)从一个查询部分传递到另一个查询部分,因此您可以使用两个where子句执行一个HAVING。见: