dee*_*esh 10 merge logic case neo4j cypher
我正在尝试在Cypher中实现逻辑,根据特定条件(CASE
Statement),我会创建一些节点和关系; 代码如下
MATCH (g:Game)-[:PLAYER]->(u:User)-[r1:AT]->(b1:Block)-[:NEXT]->(b2:Block)
WHERE g.game_id='G222' and u.email_id = 'xyz@example.com' 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
Run Code Online (Sandbox Code Playgroud)
在此查询中有一条merge
语句WHEN 'y' THEN
,此查询会引发错误:
输入']'无效:预期的空格或关系模式(第7行,第82列)"MERGE(u) - [r2:STAGE {startdate:20141225,enddate:'99999999',status:'InProgress'}] - >( b2 {fork:'fail'})返回1"
基本上我正在尝试创建一个基于属性的关系,即MERGE
在一个CASE
语句中,我尝试了不同的方法让它像返回一样工作,以便返回一些值等但是到目前为止没有任何工作.
这个查询可能有什么问题?
Ste*_*ter 18
要进行条件写操作,您需要使用该FOREACH
技巧.使用CASE
您返回一个元素数组或空元素数组.FOREACH
迭代CASE
表达式,因此有条件地执行操作.如果你想要一个ELSE
部件,你需要FOREACH
使用另一个使用反向条件CASE
.作为一个例子,而不是
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
Run Code Online (Sandbox Code Playgroud)
使用
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)
)
Run Code Online (Sandbox Code Playgroud)
另见Mark的博客文章.
归档时间: |
|
查看次数: |
12651 次 |
最近记录: |