将具有邻居计数的虚拟属性添加到Cypher中每个结果节点的简明方法

问题描述 投票:0回答:1

我正在使用 NeoDash,我想生成一个图形报告,其中每个节点大小按邻居数量加权。

因此这个计数必须成为 NeoDash 正确分析的节点的属性。

现在,经过 4 个小时,我终于成功完成了以下查询,但我很确定应该有一种更优雅、更简洁的方法来完成相同的操作,对吗?

  MATCH path=(n)-[r]->(c) //n is already from a subset, and here we exclude _events
    WHERE NOT c:_event

WITH collect(distinct n) as listN, collect(distinct c) as listC
  UNWIND listN as n
    MATCH (n)-[r]->(c) WHERE c in listC

WITH listN, listC, n, count(c) as countC
  SET n.counter=countC

WITH collect(n) as listN, listC
  UNWIND listC as c
    MATCH (n)-[r]->(c) WHERE n in listN

WITH c, count(n) as countN, listN
  SET c.counter=countN

WITH collect(c) as listC, listN
  MATCH (n)-[r]->(c)
    WHERE n in listN 
      and c in listC

RETURN n,r,c

或者有 apoc 快捷方式吗?

编辑:我找到了一种使用 APOC 的方法,但我正在等待从下面有希望的答案中了解更多信息。 无论如何,这是我的 APOC 版本:

  MATCH (n)-[r]->(c)
    WHERE NOT c:_event

CALL{
  WITH n,r,c
    CALL apoc.neighbors.athop.count(n) 
      YIELD value 
      SET n.counter=value
  }

CALL{
  WITH n,r,c
    CALL apoc.neighbors.athop.count(c) 
    YIELD value 
    SET c.counter=value
  }

RETURN n,r,c
neo4j cypher neo4j-apoc neodash
1个回答
0
投票

您可以使用

COUNT
子查询(自 Neo4j 5.3 起可用)将邻居计数内联到
SET
子句。

此示例获取所有节点,计算通过出站关系连接的所有邻居(也不是

_event
节点),并将
counter
属性设置为该值:

MATCH (n)
SET n.counter = COUNT { (n)-->(:!_event) }
© www.soinside.com 2019 - 2024. All rights reserved.