2013-08-13 4 views
12

Когда я запускаю этот запрос:Как удалить повторяющиеся отношения между двумя узлами с помощью cypher?

START n1=node(7727), n2=node(7730) 
MATCH n1-[r:SKILL]->n2 RETURN r 

это дает мне список дубликатов отношений, которые у меня есть между двумя узлами. что я добавляю к запросу cypher для перебора отношения, чтобы сохранить одно отношение и удалить остальные?

ответ

26

Чтобы сделать это для двух известных узлов:

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) 
+1

В последних версиях neo4j я считаю, что предложение «СТАРТ» не нужно, не так ли? Кажется, он работает без него. –

+0

Я не понял, как это сработало, пока я не понял, что 'tail' возвращает все, кроме первого элемента. благодаря! – fiat

Смежные вопросы