2017-10-10 77 views
1

從我的搜索我沒有找到一種方法來動態設置對象的屬性,只有通過定義它硬編碼(如下面的「詳細」屬性)Neo4j - Cypher - 建立對象屬性是動態的,如類型(r)

這裏是我的示例: Neo4j Graph或通過Neo4j Console

MATCH(p:Person)-[r]->(m:Movie) 
WITH { Person: p.name, 
     Detail: collect(r.roles) 
    } AS Result 
RETURN Result 

我的目標(還沒有成型):

MATCH(p:Person)-[r]->(m:Movie) 
WITH { Person: p.name, 
     CASTED_FOR: // --> Only values(r.roles) for relationship "CASTED_FOR" needed here 
     ACTED_IN: // --> Only values(r.roles) for relationship "ACTED_IN" needed here 
    } AS Result 
RETURN Result 

I K現在我可以製作例如[r:CASTED_FOR]或WHERE Type(r)=「CASTED_FOR」,但我不喜歡有多個WITH和MATCH查詢。

謝謝

回答

3

此查詢使用Cypher支架的list comprehension結構做你想做什麼:

MATCH (p:Person)-[r]->(:Movie) 
WITH p, COLLECT(r) AS rs 
RETURN { 
    Person: p.name, 
    CASTED_FOR: [x IN rs WHERE TYPE(x) = 'CASTED_FOR' | x.roles], 
    ACTED_IN: [x IN rs WHERE TYPE(x) = 'ACTED_IN' | x.roles] 
} AS Result 
+0

偉大的答案,謝謝 – Peter