this is how the situation looks like, in this example, I want to have a weight of 4 on each edge, then I can delete the duplicates and like this I can have the graph weighted for my situation我想计算图中每个节点的重复边数,然后将该数字放在一个边上以使图加权。
有没有可以帮助我实现这一目标的查询?
答案 0 :(得分:0)
您可以尝试类似的方法:
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});
答案 1 :(得分:0)
通过修改此查询 在大小((n)-[:AGGREGATED]->())= 0 AND大小((n)->())> 0的情况下匹配(n) n限制为1000 匹配(n)-[r]->(m) WITH n,m,count(r)AS计数 创建(n)-[:总计{weight:count}]->(m) 返回计数(*);
我通过以下查询到达了想要的地方
可选匹配(u:疾病)-[r:HAS_CHILD]->(o:疾病)与u,o,count(r)计数创建(u)-[r:HAS_CHILD {weight:count}]- >(o)返回u,r,o;