gpt4 book ai didi

merge - Cypher Neo4J - 带有 MERGE 的 CASE 表达式

转载 作者:行者123 更新时间:2023-12-04 03:00:46 27 4
gpt4 key购买 nike

我正在尝试在 Cypher 中实现逻辑,根据特定条件(CASE 语句),我会创建一些节点和关系;代码如下

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

在这个查询中有一个 merge WHEN 'y' THEN内的声明,此查询引发错误:

Invalid input ']': expected whitespace or a relationship pattern (line 7, column 82) "MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2 {fork:'fail'}) RETURN 1"



基本上,我试图创建基于属性的关系,即 MERGECASE声明,我尝试了不同的方法来让这个工作,比如做一个返回,以便在返回某些值等的情况下,但到目前为止没有任何效果。

这个查询可能有什么问题?

最佳答案

要进行条件写入操作,您需要使用 FOREACH诡计。使用 CASE您要么返回一个元素数组,要么返回一个空数组。 FOREACH迭代 CASE表达式,因此有条件地执行操作。如果你想要一个 ELSE部分以及你需要有另一个 FOREACHCASE 中使用逆条件.举个例子,而不是

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


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)
)

另见 Mark's blog post在这一点上。

关于merge - Cypher Neo4J - 带有 MERGE 的 CASE 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com