2013-07-18 91 views
1

我有一個根節點鏈接列表設置,鏈接了不同的項目類型。要檢索說出的第10項(與可能的關係),我做了以下內容:在neo4j密碼中分組CASE結果

START user=node(1) 
MATCH user-[:LIST*1..10]->item 
WITH item 
MATCH author-[a?:AUTHOR]->item 
RETURN item, a, author 

這工作得很好,並返回所需的項目,但也有一些作者的屬性我不想回客戶。所以通常我只會想要的屬性,例如。 RETURN author.name, author.location,但如果該項目沒有作者,則這不起作用。我可以在屬性上使用?,但是我最終可能會爲每個項目添加很多空屬性。

然後我發現CASE聲明,它幾乎適用於我的用例。問題是如果可能,我希望能夠根據THEN返回多個屬性。例如:

RETURN labels(item) as type, 
CASE HEAD(type) 
    WHEN "Post" THEN (item.title, item.text, author) 
    WHEN "Message" THEN (item.subject, item.content) 
END as item 

WHEN線上面會返回一個語法錯誤,因爲你只能把一個值再經過。有沒有什麼方法可以將結果合併到上面的方法中?

回答

2

使用後字面集合,然後,我們將在以後添加地圖的支持,因此它會得到更漂亮:)

你也可以改變頭(類型)項:標籤

RETURN labels(item) as type, 
CASE 
    WHEN item:Post THEN [item.title, item.text, author] 
    WHEN item:Mesage THEN [item.subject, item.content] 
END as item 
0

我想補充那些降落在這裏分組或建設成果從案件時..

您也可以建立一個散列或基於對象的集合(邁克爾飢餓例子)...

RETURN labels(item) as type, 
CASE 
    WHEN item:Post THEN {title: item.title, text: item.text, author:author} 
    WHEN item:Mesage THEN {subject:item.subject, content:item.content} 
END as item 

其中author在這種情況下可能是從以前的collect({..})構建的。

警告但是:不要在再經過嘗試收集(),Neo4j的將進入一個瘋狂旋轉(僅適用於2.0.0測試)和崩潰,如果你的幸運,也許恢復..

DO NOT DO :

WHEN item:Post THEN collect({title: item.title, text: item.text, author:author}) 

這聽起來正常的我,但沒有收集一期工程爲好,如果有人能解釋這將有助於更好地瞭解的收集和CASE WHEN ..

同時,Cypher支架上。 。