是编写此查询的最有效方法。问题。我有一套3500名男孩和女孩打篮球的名字。我想与他们建立关系,因为他们属于幼儿,青少年,基于年龄组的青少年。
我无法在foreach中做一个案例陈述。
Match(b:BoysandGirls)
UNWIND (b.name) as namelist
FOREACH (fullname in namelist |
MERGE(b1:BoysandGirls {name:fullname})
CASE WHEN b1.age < 6 THEN
MERGE(t1:KidsType {group:"Toddler"}) // this groups already exist
MERGE(b1)-[BELONGS_TO]->(t1)
END
)
//我有更多的团体,如年轻人和青少年......但不确定 我收到一个错误输入无效...预期1 / L ..在CASE语句中。 我做错了什么?
答案 0 :(得分:2)
FOREACH
仅允许变异操作,但CASE
不是变异操作(CASE
也不能包含匹配/变异操作)。除了这些问题之外,我认为您对UNWIND
所做的事情感到困惑 - 您可能意味着COLLECT
。但我认为你根本不需要使用COLLECT
和FOREACH
(因为它们基本上相互抵消)。
这个更简单的查询可能就是您所需要的:
MATCH (bg:BoysandGirls)
WHERE bg.age < 6
MATCH (t:KidsType {group:"Toddler"})
MERGE (bg)-[:BELONGS_TO]->(t);
它找到小于6的所有BoysandGirls
并确保它们与(#{1}}关系类型相关 - 请注意所需的前一个冒号)到&#34;幼儿&#34; BELONGS_TO
。