特定属性值的总和

时间:2017-09-09 19:08:33

标签: neo4j

我正在试图看看我是否有办法在Cypher中对节点中的所有统计数据进行总和(因此包括所有类型和类别,其中可能有很多)。或者在用户请求中排除一些例如排除所有category1或仅排除category1,type3。

希望我能正确解释,但我甚至不确定这是否可行。

enter image description here

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做。想象一下具有这些属性的两个Foo节点。这里的一个限制是我们需要在节点上存储该总数,如下所示:

create (a:Foo { type1: 3, type2: 4, type3: 7, total: 0 });
create (b:Foo { type1: 1, type2: 3, type4: 4, total: 0 });

现在,如果我们想要对这些属性求和:

MATCH (a:Foo) 
  FOREACH (prop in 
    filter(z in keys(a) WHERE z <> 'total') | 
  SET a.total = a.total + a[prop]);

分解这一点,keys函数迭代节点中的所有属性。这里我们将浏览除 total属性之外的所有属性。对于每个属性,我们只是将其值添加到总数中。中提琴。

假设您想要一组不同的属性而不是所有,您只需调整WHERE z<> 'total'部分即可选择所需的属性,例如WHERE z = 'something' or z = 'something else'

最后:

MATCH (a:Foo) RETURN a.total;
+---------+
| a.total |
+---------+
| 14      |
| 8       |
+---------+