neo4j存储节点在关系上作为一个属性的边数(一种使图形加权的方法)

neo4j存储节点在关系上作为一个属性的边数(一种使图形加权的方法),neo4j,Neo4j,我想计算图中每个节点的重复边数,然后将该数放在一条边上,使图加权 是否有一个查询可以帮助我实现这一点?您可以尝试以下方法: MATCH (n)-[r]->(m) WITH n, m, count(r) AS count CREATE (n)-[:AGGREGATED { weight:count}]->(m) 但是这个查询根本无法执行,因为您正在处理整个图形,并且可能会将所有数据库都放在RAM中 因此,您必须批处理此查询: MATCH (n) WHERE size((n)-[:

我想计算图中每个节点的重复边数,然后将该数放在一条边上,使图加权


是否有一个查询可以帮助我实现这一点?

您可以尝试以下方法:

MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
  CREATE (n)-[:AGGREGATED { weight:count}]->(m)
但是这个查询根本无法执行,因为您正在处理整个图形,并且可能会将所有数据库都放在RAM中

因此,您必须批处理此查询:

MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0 
WITH n LIMIT 1000
  MATCH (n)-[r]->(m)
  WITH n, m, count(r) AS count
    CREATE (n)-[:AGGREGATED { weight:count}]->(m)
    RETURN count(*)
您可以反复执行此查询,直到其结果不是0为止。 如果你懒惰,APOC中有一个程序可以做到这一点:

call apoc.periodic.commit("
    MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0 
    WITH n LIMIT $limit
      MATCH (n)-[r]->(m)
      WITH n, m, count(r) AS count
        CREATE (n)-[:AGGREGATED { weight:count}]->(m)
        RETURN count(*)", {limit: 1000});
通过修改此查询 匹配n,其中sizen-[:聚合]->=0和sizen->>0 n限制为1000 匹配n-[r]->m 以n,m,countr作为计数 创建n-[:聚合{weight:count}]->m 返回计数*

我通过下面的查询到达了我想要的位置

可选匹配u:Disease-[r:HAS_CHILD]>o:Disease与u,o,countras count创建u-[r:HAS_CHILD{weight:count}]>o返回u,r,o


您只有一种关系类型还是多种关系类型?我现在使用一种关系,但在使用一种关系完成图形后,我必须再添加一种关系,下一种关系将映射到。我想问您,如果有更多的关系,查询是否会以不同的方式工作?我的查询将统计所有传出的关系,无论其类型如何。看看模式:n-[r]->mI尝试了除最后一个查询之外的其他查询,并且只有在我创建另一种类型的关系时,它们才会工作,我想将计数添加为现有关系HAS_CHILD的属性。感谢您的帮助和兴趣有没有办法修改查询以处理大量数据?