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
分组键是 s
和 p
,因此 COUNT(w)
只会计算给定的 s
和 s
对之间存在多少 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
我正在开始使用 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
分组键是 s
和 p
,因此 COUNT(w)
只会计算给定的 s
和 s
对之间存在多少 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