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

时间:2012-06-04 11:33:24

标签: 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;

我希望在WHERE子句中为相同的docid2节点集检查不同的条件,并根据日期字段累积结果并执行顺序。 我无法在同一交易中提供多重匹配和退货。 那时我正在尝试使用两个不同的cypher脚本并将它们组合在第三个查询中。这可能在密码中吗? 或者是否有任何选项来编写自定义函数并调用它们? 我们是否存储了像Stored Gremlin脚本这样的Cypher脚本?

1 个答案:

答案 0 :(得分:1)

正如迈克尔在评论中提到的,您可以使用“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

这将检查“x”节点是否存在,如果不存在,则继续创建它并添加几个参数。

如果您希望在结果集上做更复杂的事情,那么您最好的选择是批量请求或Java API ......