我正在使用 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 快捷方式吗?
编辑:我找到了一种使用 APOC 的方法,但我正在等待从下面有希望的答案中了解更多信息。 无论如何,这是我的 APOC 版本:
MATCH (n)-[r]->(c)
WHERE NOT c:_event
CALL{
WITH n,r,c
CALL apoc.neighbors.athop.count(n)
YIELD value
SET n.counter=value
}
CALL{
WITH n,r,c
CALL apoc.neighbors.athop.count(c)
YIELD value
SET c.counter=value
}
RETURN n,r,c
您可以使用
COUNT
子查询(自 Neo4j 5.3 起可用)将邻居计数内联到 SET
子句。
此示例获取所有节点,计算通过出站关系连接的所有邻居(也不是
_event
节点),并将 counter
属性设置为该值:
MATCH (n)
SET n.counter = COUNT { (n)-->(:!_event) }