Neo4J Cypher - CASE-Ausdruck mit MERGE
Bin ich versucht zu implementieren, die Logik in der Cypher, wo, basierend auf einer bestimmten Bedingung (CASE
- Anweisung), würde ich erstellen Sie einige Knoten und Beziehungen; der code ist als unten
MATCH (g:Game)-[:PLAYER]->(u:User)-[r1:AT]->(b1:Block)-[:NEXT]->(b2:Block)
WHERE g.game_id='G222' and u.email_id = '[email protected]' and b1.block_id='16'
SET r1.status='Skipped', r1.enddate=20141225
WITH u, b2,b1, g, r1
SET b1.test = CASE b2.fork
WHEN 'y' THEN
MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2 {fork:'fail'}) RETURN 1
ELSE
MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2) RETURN 2
END
WITH u, g
MATCH (u)-[:TIME]->(h:Time)<-[:TIME]-(g)
SET h.after = 0
SET h.before = h.before + 1
In dieser Abfrage gibt es eine merge
- Anweisung innerhalb der WHEN 'y' THEN
diese Abfrage wirft eine Fehlermeldung:
Ungültige Eingabe ']': expected whitespace oder eine Beziehung Muster (Zeile 7, Spalte 82)
"MERGE (u)-[r2:BÜHNE {"startdate": 20141225, enddate:'99999999', status:'InProgress'}]->(b2 {Gabel:'fail'}) RETURN 1"
Grundsätzlich bin ich versucht, zu erstellen eine Beziehung basierend auf einer Eigenschaft, d.h. eine MERGE
innerhalb einer CASE
Aussage, habe ich versucht, verschiedene Möglichkeiten, um diese Arbeit tun, wie eine Rückkehr, so dass Fall wenn gibt einige Wert etc. aber nichts funktionierte so weit.
Was könnte das Problem mit dieser Abfrage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun conditional write-Operationen, die Sie verwenden müssen, um die
FOREACH
trick. MitCASE
Sie entweder zurückgeben eines element-array oder eine leere.FOREACH
durchläuft dieCASE
expression ist, und daher bedingt führt die Aktion aus. Wenn Sie möchten, eineELSE
Teil, so müssen Sie einen anderenFOREACH
über die inverse Bedingung, in derCASE
. Als ein Beispiel, anstattverwenden
Siehe auch Mark ' s blog-post auf dieser.
THEN [1] ELSE []
, und was istignoreMe
(sorry, ich konnte nicht ignorieren Sie)?Wurde das Problem behoben, wie unten
d.h. verwendet FALL, WENN zum erstellen eines dummy-array, das in einer Art und Weise hat der dummy-Elemente passend zu den Anzahl der Spiele und dann verwenden Sie FOREACH zu iterieren durch die Ergebnis.
Wieder, vielen Dank Stefan für die Idee...
Deepesh