neo4j:with 后的多个值

neo4j: multiple values after with

我正在开始使用 neo4j 并创建了一个简单的图形来练习。它包含在项目中工作的学生。

我想检索在 2 个以上项目中工作的学生以及各自的项目,如下所示:

match (s:Student)-[w:WORKSON]->(p:Project) 
with s, p, count(w) as w_count 
where w_count > 2 return s, p

这没有给我任何结果。但是当我这样做时

match (s:Student)-[w:WORKSON]->(p:Project) 
with s, count(w) as w_count 
where w_count > 2 return s

我得到了正确的学生,当我这样做时

match (s:Student)-[w:WORKSON]->(p:Project) 
with p, count(w) as w_count 
where w_count > 2 return p

我得到了正确的项目。浏览 with documentation 它对这种情况没有任何说明。

您需要查看 aggregating functions(如 COUNT)的文档,以及它们如何与 grouping keys 一起使用。

例如,在您的第一个查询中:

match (s:Student)-[w:WORKSON]->(p:Project) 
with s, p, count(w) as w_count 
where w_count > 2 return s, p

分组键是 sp,因此 COUNT(w) 只会计算给定的 ss 对之间存在多少 WORKSON 关系p 个节点(它们之间至少有一个这样的关系)。该计数将始终为 1,因此 WHERE 测试始终失败。

为了 "retrieve the students who are working in more than 2 projects and the respective projects",试试这个:

MATCH (s:Student)-[:WORKSON]->(p:Project) 
WITH s, COLLECT(p) AS ps
WHERE SIZE(ps) > 2
RETURN s, ps