Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j重复关系_Neo4j_Cypher - Fatal编程技术网

Neo4j重复关系

Neo4j重复关系,neo4j,cypher,Neo4j,Cypher,我在节点之间有重复的关系,例如: (Author)-[:CONNECTED_TO {weight: 1}]->(Coauthor) (Author)-[:CONNECTED_TO {weight: 1}]->(Coauthor) (Author)-[:CONNECTED_TO {weight: 1}]->(Coauthor) 我想把这些关系合并成一个形式的关系:A->{weight:3}B,用于我的整个图 我尝试了如下的方法;(我正在从csv文件读取数据) 但当我开始这个

我在节点之间有重复的关系,例如:

(Author)-[:CONNECTED_TO {weight: 1}]->(Coauthor)

(Author)-[:CONNECTED_TO {weight: 1}]->(Coauthor)

(Author)-[:CONNECTED_TO {weight: 1}]->(Coauthor)
我想把这些关系合并成一个形式的关系:A->{weight:3}B,用于我的整个图

我尝试了如下的方法;(我正在从csv文件读取数据)

但当我开始这个查询时,ıt会创建重复的共同作者节点。权重将更新。似乎是这样的:

(Author)-[r:CONNECTED_TO]->(Coauthor)

(它为作者创建了3个相同的共同作者节点)

如果您需要在事后修复它,您可以聚合所有关系以及每组适用节点之间的权重。然后用新的聚合数更新第一个关系。然后使用关系集合删除第二个到最后一个。仅在存在多个关系的情况下执行更新。像这样的

MATCH (a:Author {name: 'A'})-[r:CONNECTED_TO]->(b:CoAuthor {name: 'B'})

// aggregate the relationships and limit it to those with more than 1
WITH a, b, collect(r) AS rels, sum(r.weight) AS new_weight
WHERE size(rels) > 1

// update the first relationship with the new total weight
SET (rels[0]).weight = new_weight

// bring the aggregated data forward
WITH a, b, rels, new_weight

// delete the relationships 1..n
UNWIND range(1,size(rels)-1) AS idx
DELETE rels[idx]
如果您对整个图形执行此操作,并且图形是可扩展的,那么您可能希望使用limit或其他一些控制机制对其进行批量更新

MATCH (a:Author)-[r:CONNECTED_TO]->(b:CoAuthor)
WITH a, b, collect(r) AS rels, sum(r.weight) AS new_weight
LIMIT 100
WHERE size(rels) > 1
SET (rels[0]).weight = new_weight
WITH a, b, rels, new_weight
UNWIND range(1,size(rels)-1) AS idx
DELETE rels[idx]
如果您想消除加载时的问题

MATCH (a:Author {authorid: csvLine.author_id}),(b:Coauthor { coauthorid: csvLine.coauthor_id})
MERGE (a)-[r:CONNECTED_TO]->(b)
  ON CREATE SET r.weight = 1
  ON MATCH SET r.weight = coalesce(r.weight, 0) + 1

<强>边注:< /强>不知道你的数据模型,我会考虑建模<代码>合著者<代码> > <代码>作者<代码>,因为它们可能是作者自己的权利。可能只有在特定项目的背景下,他们才会被视为合著者

MATCH (a:Author {authorid: csvLine.author_id}),(b:Coauthor { coauthorid: csvLine.coauthor_id})
MERGE (a)-[r:CONNECTED_TO]->(b)
  ON CREATE SET r.weight = 1
  ON MATCH SET r.weight = coalesce(r.weight, 0) + 1