【问题标题】:Neo4j Update node with aggregated count具有聚合计数的 Neo4j 更新节点
【发布时间】:2021-06-08 00:44:04
【问题描述】:

我正在尝试计数并使用该值设置节点的属性。例如以下查询:

MATCH (n:node)-[]->() return n, count(*)

返回每个计数旁边的节点。我希望能够做这样的事情:

MATCH (n:node)-[]->() set n.relationCount = count(*)

但是执行上述返回错误:

Aggregations should not be used like this.

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我正在查看类似的问题,虽然我没有找到在设置数据时准确使用聚合的方法,但我确实设法将一个示例逆向工程到:

    MATCH (n:node)-[]->()
    WITH n, count(*) as c
    SET n.data = c
    

    这似乎有效!

    【讨论】:

    • 限制使用的原因是聚合需要一个为聚合提供上下文的分组键(否则它跨越所有行)。这可以在 WITH 子句中清楚地表达(这是我们允许它们的地方),但如果在 SET 中使用(尤其是在更复杂的模式之后),它可能会变得模棱两可,这是我们想要避免的。
    • @InverseFalcon 我还发现,当我分析结果时,这个版本的 count 在涉及节点循环时表现得很奇怪。 count(distinct *) 但是按照我最初的预期工作。可以理解为什么会发生奇怪的行为,我想它比计算不同的节点更有效吗?但绝对要注意:)
    • 是的,重要的是要了解,当你想计算不同的节点时,你需要count(distinct ...)。否则,将根据它们的出现次数对相同的实体进行计数,而不是对每个不同的实体进行一次计数。有些用例需要这两种行为,因此 DISTINCT 关键字允许您选择您需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多