运行此查询时:
START n1=node(7727), n2=node(7730) MATCH n1-[r:SKILL]->n2 RETURN r
它给了我一个在两个节点之间的重复关系的列表。我在密码查询中添加什么来迭代关系以保留一个关系并删除其余的?
ktecyv1j1#
要对两个已知节点执行此操作:
start n=node(1), m=node(2) match (n)-[r]->(m) with n,m,type(r) as t, tail(collect(r)) as coll foreach(x in coll | delete x)
要对所有关系全局执行此操作(请注意,此操作可能会非常昂贵,具体取决于图形的大小):
start r=relationship(*) match (s)-[r]->(e) with s,e,type(r) as typ, tail(collect(r)) as coll foreach(x in coll | delete x)
jvlzgdj92#
在Neo4J 4.x中,为了全局删除重复的关系,您需要使用以下代码:语法略有变化,在另一个回复中提到的start前缀不再有效。
start
match ()-[r]->() match (s)-[r]->(e) with s,e,type(r) as typ, tail(collect(r)) as coll foreach(x in coll | delete x)
kmb7vmvb3#
如果你对从DB中删除数据的随机查询有信任问题,你可以做我所做的。首先,您可能需要检查所选关系是否真的是重复的,这个查询将属性willBeDeleted设置为true,这样您就可以检查是否真的要删除这些关系。
match (a)-[r]->(b) with a,b,type(r) as typ, tail(collect(r)) as coll foreach(x in coll | set x.willBeDeleted=true)
现在,您可以检查哪些关系实际上将被删除。
match(a)-[r]-(b) where r.willBeDeleted=true return a, b, r
如果您认为正确的关系将被删除,那么您可以执行这个查询来删除重复的关系。
match (a)-[r]->(b) with a,b,type(r) as typ, tail(collect(r)) as coll foreach(x in coll | delete x)
lc8prwob4#
这里有一个很好的方法来查找所有重复关系,并了解它们发生的位置。
MATCH p=(n)-[r1]->(g)<-[r2]-(n) WHERE type(r1) = type(r2) AND r1 <> r2 RETURN type(r1) as relType, labels(n), labels(g), count(p)
4条答案
按热度按时间ktecyv1j1#
要对两个已知节点执行此操作:
要对所有关系全局执行此操作(请注意,此操作可能会非常昂贵,具体取决于图形的大小):
jvlzgdj92#
在Neo4J 4.x中,为了全局删除重复的关系,您需要使用以下代码:语法略有变化,在另一个回复中提到的
start
前缀不再有效。kmb7vmvb3#
如果你对从DB中删除数据的随机查询有信任问题,你可以做我所做的。
首先,您可能需要检查所选关系是否真的是重复的,这个查询将属性willBeDeleted设置为true,这样您就可以检查是否真的要删除这些关系。
现在,您可以检查哪些关系实际上将被删除。
如果您认为正确的关系将被删除,那么您可以执行这个查询来删除重复的关系。
lc8prwob4#
这里有一个很好的方法来查找所有重复关系,并了解它们发生的位置。