【问题标题】:How do I provide multiple queries in Neo4j Cypher?如何在 Neo4j Cypher 中提供多个查询?
【发布时间】:2012-06-08 11:33:12
【问题描述】:

我想在第二个查询中使用第一个查询的结果。我不确定如何在 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 节点集的不同条件,并根据日期字段累积结果并执行 order by。 我无法在同一个交易中提供多个匹配和返回。 那是当我试图拥有两个不同的密码脚本并将它们组合到第三个查询中时。这在密码中可能吗? 或者是否有任何选项可以编写自定义函数并调用它们? 我们是否像 Stored Gremlin 脚本一样存储了 Cypher 脚本?

【问题讨论】:

  • 您可以查看 WITH ,它允许您将查询结果(也聚合)从一个查询部分传送到另一个查询部分,因此您可以使用两个 where 子句执行例如 HAVING。见:docs.neo4j.org/chunked/snapshot/query-with.html

标签: neo4j cypher


【解决方案1】:

正如 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

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

如果您希望对结果集执行更复杂的操作,最好的选择是批处理请求或 Java API...

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2023-01-28
    • 2015-11-01
    相关资源
    最近更新 更多