Neo4J Cypher计算多个属性的平均值

时间:2017-03-28 16:37:11

标签: neo4j cypher aggregation

在Neo4J中,我遇到以下问题:

节点以树状或父/子样式结构排列。 在"叶子"或子节点,每个节点都有一组nummerical属性。

我需要一个Cypher查询来计算每个属性的平均值,并在父节点中具有相同名称的属性中对其进行处理。

这样的东西
MATCH (p:Parent)-[]->(c:Child) 
SET p.attrib1 = avg(c.attrib1)
SET p.attrib2 = avg(c.attrib2)

将完成这项工作,但是......

子节点中的属性数量应该是动态的,我不想在子节点提供额外的属性名称时更改代码。只要属性是小数,代码就应该适应这一点。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

您可以在APOC procedure library的帮助下完成此操作。您可以几乎在原生Cypher中执行此操作,但您无法动态指定要创建的属性的名称,但我们可以使用apoc.create.setProperty执行此操作:

MATCH (parent:Parent)<-[]-(child:Child) 
WITH parent, child, keys(child) AS props
UNWIND props AS prop
WITH parent, prop, avg(child[prop]) AS mean
CALL apoc.create.setProperty(parent, prop, mean) YIELD node
RETURN *

这个Neo4j Console.

中有一个简单的例子