首页 > 解决方案 > neo4j javascript API:排序和收集 UNIONS MATCH

问题描述

我必须运行基于查询联合的查询,并且我必须对结果应用 COLLECT 和 SORT(我在 neo4j 3.5 上)

所以我的起始伪代码如下:

var session = driver.session();
  return session
.run("QUERY_1 return value as COL1, value2 as COL2 UNION QUERY_2 return value as COL1, value2 as COL",{paramslit}) 
.then(result => {
      session.close();
      return result.records.map(record => { return new RESULT(...)}
});
    })
    .catch(error => {
      session.close();
      throw error;
    });

我的问题是我需要将 col2 的结果作为一个集合,所以我需要在密码查询中应用 collect ;但是收集应该在联合之后应用,因为 QUERY_1 和 QUERY_2 都可以返回给定 col1 的值

QUERY_1 和 QUERY_2 已经相当复杂了,我认为没有办法通过没有 UNION 的单个查询来获取这些查询的输出

对于仅密码的代码,我知道有apoc.cypher.run 但我无法使其在session.run代码中按预期工作

标签: neo4jcypherneo4j-apoc

解决方案


在 Neo4j 4.0 中,Cypher 中增加了一个新的子查询功能,它支持post-UNION 处理

您可以使用该功能来做您想做的事。这是新的 Cypher 伪代码:

CALL {
  QUERY_1 return value as COL1, value2 as COL2
  UNION
  QUERY_2 return value as COL1, value2 as COL2
}
RETURN COL1, COLLECT(COL2) as SET_OF_COL2

推荐阅读