我正在使用 NeoDash,我想生成一个图形报告,其中每个节点大小按邻居数量加权。
所以这个计数必须成为 NeoDash 正确分析的节点的属性。
现在,经过 4 个小时,我终于成功完成了以下查询,但我很确定应该有一种更优雅、更简洁的方法来完成同样的任务,对吧?
MATCH path=(n)-[r]->(c) //n is already from a subset, and here we exclude _events
WHERE NOT c:_event
WITH collect(distinct n) as listN, collect(distinct c) as listC
UNWIND listN as n
MATCH (n)-[r]->(c) WHERE c in listC
WITH listN, listC, n, count(c) as countC
SET n.counter=countC
WITH collect(n) as listN, listC
UNWIND listC as c
MATCH (n)-[r]->(c) WHERE n in listN
WITH c, count(n) as countN, listN
SET c.counter=countN
WITH collect(c) as listC, listN
MATCH (n)-[r]->(c)
WHERE n in listN
and c in listC
RETURN n,r,c
或者有 apoc 的快捷方式吗?
您可以使用
COUNT
子查询(自 Neo4j 5.3 起可用)将邻居计数内联到子句SET
。此示例获取所有节点,计算通过出站关系连接的所有邻居(也不是
_event
节点),并将counter
属性设置为该值:下面的查询只需要一个
MATCH
,不需要APOC。CALL子查询不返回任何内容,因此保留单个外部行不变。