2017-04-07 46 views
0

什麼是寫這個查詢最有效的方法。問題。我有一組3500名打籃球的男孩和女孩。我想與他們建立一種關係,因爲他們屬於基於他們年齡組的幼兒,青少年和青少年。neo4j在Foreach中的case語句

我無法在foreach中做一個case語句。

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 
) 

//我有更多的團體,如青年和少年......但不知道
我會在CASE語句錯誤無效的輸入...預計1/L ..。 我做錯了什麼?

回答

1

FOREACH只允許變異操作,但CASE不是變異操作(並且CASE也不能包含匹配/變異操作)。除了這些問題之外,我認爲你也對UNWIND的作用感到困惑 - 你的意思可能是COLLECT。但我認爲你根本不需要使用COLLECTFOREACH(因爲它們基本上相互抵消)。

這更簡單的查詢可能是你所需要的:

MATCH (bg:BoysandGirls) 
WHERE bg.age < 6 
MATCH (t:KidsType {group:"Toddler"}) 
MERGE (bg)-[BELONGS_TO]->(t); 

它發現不到6歲的所有BoysandGirls,並確保它們是相關的(通過BELONS_TO關係型)的「幼兒」 KidsType

+1

@ClickAway另一個需要考慮的事情是,如果這樣做的唯一目的是對節點進行分類(如果沒有其他屬性:KidsType節點,並且您不打算使用這些節點出於任何其他原因),則可以在節點上添加其他標籤(:幼兒,青少年,青少年)。 Neo4j允許使用多標籤的節點,您可以使用這些標籤進行匹配,以便快速查詢年齡段。 – InverseFalcon