2016-08-11 56 views
0

有許多關係和節點。我們想要從Neo4j數據庫中檢索數據作爲對象數組。作爲Neo4j中的對象數組檢索數據

如果我們MATCH爲:

MATCH (user: user {name:"x"}) 
OPTIONAL MATCH (user)-[r]->(item) 
OPTIONAL MATCH (item)-[s]->(approver) 
RETURN user, item, approver 

我們得到的結果爲:

[{user:{properties:{name:"x"}}, item:{properties:{name:"abc"}}, approver:{properties:{name:"a"}}}, 
{user:{properties:{name:"x"}}, item:{properties:{name:"abc"}}, approver:{properties:{name:"b"}]}}, 
{user:{properties:{name:"x"}}, item:{properties:{name:"xyz"}}, approver:{properties:{name:"c"}}}, 
{user:{properties:{name:"x"}}, item:{properties:{name:"xyz"}}, approver:{properties:{name:"d"}}} }] 

我們需要得到類似序結果,減少複雜性,同時在客戶端處理龐大的關係:

[{user:{properties:{name:"x"}}, item:{properties:{name:"abc"}}, approvers:[{properties:{name:"a"}}, {properties:{name:"b"}}]},  
{user:{properties:{name:"x"}}, item:{properties:{name:"xyz"}}, approvers:[{properties:{name:"c"}}, {properties:{name:"d"}}] }] 

如何做到這一點?

回答

1

聽起來像你需要收集列表中的項目。試試這個:

MATCH (user: user {name:"x"}) 
OPTIONAL MATCH (user)-[r]->(item) 
RETURN user, COLLECT(item) 

你可能想花一些時間去看看Cypher的備忘單並查看COLLECT()函數以及列表操作。

編輯

看起來像你加入一個項目的潛在審批到你的描述。在這種情況下,它看起來像您想按用戶和項目進行分組,並擁有一批審批人。

MATCH (user: user {name:"x"}) 
OPTIONAL MATCH (user)-[r]->(item) 
OPTIONAL MATCH (item)-[s]->(approver) 
RETURN user, item, COLLECT(approver) AS approvers