Este dilema se puede solucionar de variadas formas, pero te dejamos la que en nuestra opinión es la respuesta más completa.
Solución:
Para hacer operaciones de escritura condicional necesitas usar el FOREACH
truco. Usando CASE
o devuelves un elemento array o uno vacío. FOREACH
itera sobre el CASE
expresión y, por lo tanto, ejecuta condicionalmente la acción. si quieres un ELSE
parte también necesitas tener otra FOREACH
utilizando la condición inversa en el CASE
. Como ejemplo, en lugar de
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
usar
FOREACH(ignoreMe IN CASE WHEN 'y' THEN [1] ELSE [] END |
MERGE (u)-[r2:STAGE startdate:20141225, enddate:'99999999', status:'InProgress']->(b2 fork:'fail')
)
FOREACH(ignoreMe IN CASE WHEN NOT 'y' THEN [1] ELSE [] END |
MERGE (u)-[r2:STAGE startdate:20141225, enddate:'99999999', status:'InProgress']->(b2)
)
Vea también la publicación de blog de Mark sobre esto.
Se solucionó el problema de la siguiente manera
WITH u, b2,b1, g, r1, CASE WHEN (b1.fork='y' and b2.fork='success') or (b1.fork='n') or (b1.fork='success') THEN ['ok'] ELSE [] END as array1
FOREACH (el1 in array1 | MERGE (u)-[r2:STAGE startdate:20141225, enddate:99999999, status:'InProgress']->(b2))
es decir, usó CASE WHEN para crear un dummy array que de alguna manera tiene elementos ficticios que coinciden con el recuento de coincidencias y luego usa FOREACH para iterar a través del resultado.
De nuevo, gracias Stefan por la idea…
profundo
Aquí tienes las reseñas y puntuaciones
Puedes respaldar nuestra publicación mostrando un comentario y dejando una puntuación te estamos agradecidos.