2017-05-05 1 views
0

Gibt es eine Möglichkeit, eine Abfrage auszuführen, nur wenn mindestens zwei Elemente in der Auflistung vorhanden sind. In meiner momentanen Situation passe ich Knoten basierend auf ihren Eigenschaften an und dann lege ich sie in die Sammlung, danach möchte ich eine foreach-Anweisung ausführen, wenn die Größe der Sammlung größer als zwei ist.Ausführen von foreach basierend auf der Größe der Sammlung

Dies ist das Fragment meiner Abfrage, die ich ausführen möchte, wenn die Größe der Sammlung von mehr als zwei Elemente ist

WITH COLLECT(items) AS itemsCol 
FOREACH(i in RANGE(0, 1)| 
    FOREACH(newItem in [productsCol[0]] | 
    FOREACH(oldItem in [productsCol[1]] | 
     CREATE UNIQUE (oldItem)-[:SEEN]->(newItem)))) 
+0

Halten Sie Ausschau nach der nächsten Version von APOC Procedures in den nächsten Wochen, es sollte eine neue Prozedur für die bedingte Ausführung von Cypher Code wie ein if/else geben. – InverseFalcon

Antwort

1

So etwas wie dies funktionieren soll:

WITH 
    COLLECT(items) AS itemsCol, 
    (CASE WHEN COUNT(items) >= 2 THEN RANGE(0, 1) ELSE NULL END) AS todo 
FOREACH(i in todo | 
    FOREACH(newItem in [productsCol[0]] | 
    FOREACH(oldItem in [productsCol[1]] | 
     CREATE UNIQUE (oldItem)-[:SEEN]->(newItem)))) 

FOREACH tut Nichts, wenn die Sammlung iteriert wird, ist NULL.

0

APOC Procedures gerade mit Unterstützung für die bedingte Ausführung von Chiffren aktualisiert. Sie benötigen Version 3.1.3.7 oder höher (bei Verwendung von Neo4j 3.1.x) oder Version 3.2.0.3 oder höher (bei Verwendung von Neo4j 3.2.x).

Sie können apoc.do.when() verwenden, da dies eine Abfrage ist, die in die Datenbank schreibt.

Etwas wie:

... 
WITH COLLECT(items) AS itemsCol 
CALL apoc.do.when(size(itemsCol) >= 2, ' 
FOREACH(i in RANGE(0, 1)| 
    FOREACH(newItem in [productsCol[0]] | 
    FOREACH(oldItem in [productsCol[1]] | 
     CREATE UNIQUE (oldItem)-[:SEEN]->(newItem))))', 
     '', {productsCol:productsCol}) YIELD value 
... 

In diesem Fall, dass Sie einen anderes Chiffre Block nicht brauchen, so können wir, dass auslassen, wenn Sie in Ihren Parametern für die Verwendung in der, wenn Abfrage übergeben müssen werden Block.

Verwandte Themen