我正在尝试根据特定条件在 Cypher 中实现逻辑(CASE
声明),我会创建一些节点和关系;代码如下
MATCH (g:Game)-[:PLAYER]->(u:User)-[r1:AT]->(b1:Block)-[:NEXT]->(b2:Block)
WHERE g.game_id='G222' and u.email_id = '[email protected] /cdn-cgi/l/email-protection' 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
在这个查询中有一个merge
内的声明WHEN 'y' THEN
,此查询会引发错误:
无效输入“]”:预期的空格或关系模式(第 7 行,第 82 列)
“合并(u)-[r2:STAGE {开始日期:20141225,结束日期:'99999999',状态:'进行中'}]->(b2 {fork:'失败'})返回1”
基本上我正在尝试创建一种基于属性的关系,即MERGE
在一个CASE
声明中,我尝试了不同的方法来使其工作,例如返回一些值等,但到目前为止没有任何效果。
此查询可能存在什么问题?
要执行条件写入操作,您需要使用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
use
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)
)
也可以看看马克的博客文章 http://www.markhneedham.com/blog/2014/08/22/neo4j-load-csv-handling-empty-columns/关于这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)