首页 > 解决方案 > Neo4j - 基于节点属性的聚合计算和设置节点属性

问题描述

我的问题与这个问题略有不同:Neo4j - 根据关系属性计算 & 设置节点属性。我需要做的是通过计算具有相同“社区”(这是另一个节点属性)的节点数来设置节点属性社区大小“CommSize”。我尝试了以下代码,但它为每个“CommSize”设置了“1”,而且我知道我的社区有数百个节点:

MATCH (i)
WITH i, i.community as comm, count(i) as CommCount
SET i.CommSize = CommCount;

如何使用每个社区中的节点数设置社区大小属性?谢谢。

标签: neo4jpropertiesset

解决方案


聚合时,非聚合变量成为分组键。因此,在您的情况下,每行有一个节点i,以及该单个节点的计数,i以及该单个节点的社区价值。

要聚合所有节点,您需要消除或聚合i,以便它不会在聚合点保留为分组键。

你可以尝试这样的事情:

MATCH (i)
WITH i.community as comm, count(i) as CommCount, collect(i) as nodes
FOREACH (i IN nodes |
 SET i.CommSize = CommCount);

如果您有许多节点要处理(可能 > 50k),那么您可能希望查看批量更新,例如使用apoc.periodic.iterate()APOC 程序。


推荐阅读