在Neo4J中,我遇到以下问题:
节点以树状或父/子样式结构排列。 在"叶子"或子节点,每个节点都有一组nummerical属性。
我需要一个Cypher查询来计算每个属性的平均值,并在父节点中具有相同名称的属性中对其进行处理。
像
这样的东西MATCH (p:Parent)-[]->(c:Child)
SET p.attrib1 = avg(c.attrib1)
SET p.attrib2 = avg(c.attrib2)
将完成这项工作,但是......
子节点中的属性数量应该是动态的,我不想在子节点提供额外的属性名称时更改代码。只要属性是小数,代码就应该适应这一点。
有没有办法实现这个目标?
答案 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 *
中有一个简单的例子