我想导入一些句子,把内容分成几个词。对于dong,我拆分了这个句子,并使用FOREACH和CASE检查数组的大小,并在此基础上运行不同类型的语句。
下面的查询是我正在使用的查询的简化版本,但是我得到的错误是相同的
WITH SPLIT("my house", " ") AS SWords
WITH SIZE(SWords) as msize, SWords
FOREACH(myize IN CASE WHEN msize = 1 THEN
[
MERGE (w1:Word{name: SWords[0]})
]
ELSE
[
MERGE (w2:Word{name: SWords[1]})
]
END
)
返回错误:
Invalid input ')': expected whitespace or a relationship pattern (line 5, column 44 (offset: 176))
" MERGE (w1:Word{name: SWords[0]})"
^
MERGE (w1:Word)
,就会得到关于FOREACH的结束括号的错误。代码:
WITH SPLIT("my house", " ") AS SWords
WITH SIZE(SWords) as msize, SWords
FOREACH(myize IN CASE WHEN msize = 1 THEN
[
MERGE (w1:Word)
]
ELSE
[
MERGE (w2:Word)
]
END
)
错误:
Invalid input ')': expected whitespace, comment, '.', node labels, '[', "=~", IN, STARTS, ENDS, CONTAINS, IS, '^', '*', '/', '%', '+', '-', '=', "<>", "!=", '<', '>', "<=", ">=", AND, XOR, OR or '|' (line 12, column 9 (offset: 332))
" )"
^
欢迎任何帮助!谢谢
发布于 2016-06-24 02:30:08
解决方案(如this question中所解释的)是使用两个FOREACH,每个条件一个:
WITH SPLIT("My house", " ") AS SWords
WITH SIZE(SWords) as msize, SWords
FOREACH(myize IN CASE WHEN msize = 1 THEN [1] ELSE [] END |
MERGE (w2:Word{name: SWords[0]})
)
FOREACH(myize IN CASE WHEN msize > 1 THEN [1] ELSE [] END |
MERGE (w1:Word{name: SWords[1]})
)
这将用于第二个FOREACH,节点"house“将被添加到db中。
无论如何,我不明白为什么我所使用的代码不能工作,最后,CASE- the ELSE语句不能像预期的那样工作。
发布于 2016-06-24 11:47:26
在Cypher中,集合([...]
)必须包含值,而不是Cypher读/写语句(如MERGE
)。
另外,您只需要一个FOREACH
子句就可以得到正确的结果:
WITH SPLIT("My house", " ") AS SWords
WITH SIZE(SWords) as msize, SWords
FOREACH(name IN
CASE
WHEN msize = 1 THEN [SWords[0]]
WHEN msize > 1 THEN [SWords[1]]
ELSE []
END |
MERGE (:Word{name: name})
);
https://stackoverflow.com/questions/38010303
复制