2016-06-08 9 views
2

Die folgende Abfrage alle Gruppen von bestimmten Benutzern mit immer dann für jedes Ergebnis (jede Gruppe) entspannen und soll alle eingehenden Beziehungen nur entfernen, wenn Graf Beziehungen zu dieser Gruppe 1. sindWie Beziehungen zu entfernen, während Iteration mit UNWIND Chiffre

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

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

kann helfen, es zu vervollständigen?

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 

Danke.

Antwort

3

können Sie verwenden size in WHERE, Beispiel:

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

Sie müssen standardmäßig nicht durchlaufen, werden die nachfolgenden Klauseln nach einem Spiel für jeden in der MATCH gefundenen Zeile ausgeführt werden, so lassen Sie uns sagen die ersten MATCH gibt die folgenden:

me  rel  allGroups 
1  rel3  node5 
1  rel4  node6 

dann wird der DELETE wird für die erste Reihe und dann für die zweite Reihe, etc ...

ausgeführt werden
+0

aber wie kann ich das auf jeder Gruppe wiederholen? wie Sie Liste der Gruppen erhalten und für jeden überprüfen müssen, wenn die Anzahl der eingehenden Beziehungen 1 ist, entfernen Sie es sonst bleiben Sie es – rayman

+0

Sie müssen nicht iterieren, fügen Sie einfach die Richtung zu dem Muster in der WHERE-Klausel –

+0

das hat funktioniert. kann den Trick erklären? :) – rayman