在Neo4j中以对象数组的形式检索数据

时间:2016-08-11 06:57:39

标签: javascript angularjs arrays neo4j

有许多关系和节点。我们想要从Neo4j数据库中检索数据作为对象数组。

如果我们匹配为:

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 个答案:

答案 0 :(得分: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