2017-04-07 4 views
0

was ist der effizienteste Weg, um diese Abfrage zu schreiben. Das Problem. Ich habe 3500 Namen von Jungen und Mädchen, die Basketball spielen. Ich möchte eine Beziehung zu ihnen eingehen, wie sie zu Kleinkindern, Jugendlichen, Teenagern gehören, die auf ihrer Altersgruppe basieren.neo4j Fall Aussage in Foreach

Ich bin nicht in der Lage eine case-Anweisung innerhalb einer foreach zu tun.

Match(b:BoysandGirls) 
UNWIND (b.name) as namelist 
FOREACH (fullname in namelist | 
    MERGE(b1:BoysandGirls {name:fullname}) 
    CASE WHEN b1.age < 6 THEN 
     MERGE(t1:KidsType {group:"Toddler"}) // this groups already exist 
     MERGE(b1)-[BELONGS_TO]->(t1) 
    END 
) 

// Ich habe mehr Gruppen wie Jugendliche und Teenager ... aber nicht sicher,
Ich erhalte eine Fehlermeldung Ungültige Eingabe ... erwartet 1/L .. bei CASE-Anweisung. was mache ich falsch?

Antwort

1

FOREACH erlaubt nur Mutationsoperationen, aber CASE ist keine Mutationsoperation (und CASE kann auch keine Match-/Mutationsoperationen enthalten). Abgesehen von diesen Problemen denke ich, Sie sind auch verwirrt darüber, was UNWIND tut - Sie wahrscheinlich stattdessen COLLECT gemeint. Aber ich glaube nicht, dass Sie COLLECT und FOREACH überhaupt verwenden müssen (da sie sich gegenseitig gegenseitig ausschließen).

So viel einfachere Abfrage könnte sein, alles, was Sie brauchen:

MATCH (bg:BoysandGirls) 
WHERE bg.age < 6 
MATCH (t:KidsType {group:"Toddler"}) 
MERGE (bg)-[BELONGS_TO]->(t); 

Alles BoysandGirls jünger findet als 6 und sorgt dafür, dass sie (über den BELONS_TO Beziehungstyp) mit dem „Kleinkind“ KidsType verwandt sind.

+1

@ClickAway Eine andere Sache zu berücksichtigen, wenn der einzige Zweck dies ist, um Knoten zu kategorisieren (wenn keine anderen Eigenschaften sind auf: KidsType-Knoten, und Sie nicht planen, diese Knoten aus irgendeinem anderen Grund zu verwenden), könnten Sie Fügen Sie zusätzliche Labels auf Ihren Knoten hinzu (: Kleinkind,: Jugend,: Teenager). Neo4j ermöglicht mehrfach markierte Knoten und Sie können mit diesen Bezeichnungen für schnelle Abfragen nach Altersgruppen übereinstimmen. – InverseFalcon