neo4j - Neo4j - 基于节点属性的聚合计算和设置节点属性
问题描述
我的问题与这个问题略有不同:Neo4j - 根据关系属性计算 & 设置节点属性。我需要做的是通过计算具有相同“社区”(这是另一个节点属性)的节点数来设置节点属性社区大小“CommSize”。我尝试了以下代码,但它为每个“CommSize”设置了“1”,而且我知道我的社区有数百个节点:
MATCH (i)
WITH i, i.community as comm, count(i) as CommCount
SET i.CommSize = CommCount;
如何使用每个社区中的节点数设置社区大小属性?谢谢。
解决方案
聚合时,非聚合变量成为分组键。因此,在您的情况下,每行有一个节点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 程序。
推荐阅读
- c - 当表达式是条件表达式时终止while循环的内容
- typescript - 打字稿:在具有作为类一部分的参数的类上创建方法
- html - 在 Bootstrap 导航栏(Z-index)后面很难定位图像
- powershell - PowerShell 模块限定名称和命令前缀
- blockchain - cordapp-samples 中公证人的前端
- asp.net-core - 具有多个参数的 RazorPages 锚标记助手
- c - 使用 POSIX 套接字的 TCP 客户端/服务器应用程序:服务器未接收到发送的第二个数据包
- amazon-web-services - AWS CDK - 如何使用“授权码”流程设置 Cognito 用户池
- c++ - 如何在 C++ 的 toString 方法中使用 setw(x) 并将其放入变量或建议中?
- terraform - 如何在不破坏现有客户端的情况下扩展 terraform 模块输入变量模式?