2016-06-08 8 views
2

следующим запроса получать все группы конкретного пользователя, то отдохнуть на каждый результате (каждую группу) и должны удалить все входящие отношения только в том случае подсчет отношение к этой группе 1.Как удалить отношения во время итерации с использованием UNWIND CYPHER

example: group1<-user1 (will delete the incoming relationship to the group) 

     group1-<user1 
     group1-<user2 (will remain all incoming relationships to the group) 

может помочь выполнить его?

MATCH (me:userId{{1})-[rel:relation_group]-(allGroups:GROUP) 
unwind userGroups as group 
//how to use CASE or WHERE in order to check if this group 
has only 1 relationship just remove it 

Спасибо.

ответ

3

Вы можете использовать size в WHERE, например:

MATCH (me:userId{{1})-[rel:relation_group]-(allGroups:GROUP) 
WHERE size((allGroups)<-[:relation_group]-()) = 1 
DELETE rel 

Вам не нужно повторять, по умолчанию последующие пункты после матча будут выполнены для каждой строки, найденной в MATCH, так скажем, первый MATCH возвращает следующее:

me  rel  allGroups 
1  rel3  node5 
1  rel4  node6 

затем DELETE будет выполняться для первой строки, то для второго ряда, и т.д. ...

+0

но как сделать так, чтобы итерация по каждой группе? поскольку у вас будет список групп и вам нужно будет проверить каждый из них, если число входящих отношений равно 1, удалите его, оставайтесь там – rayman

+0

Вам не нужно итерации, просто добавьте направление в шаблон в предложении WHERE –

+0

, что работал. может объяснить трюк? :) – rayman

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

  • Нет связанных вопросов^_^