有许多关系和节点。我们想要从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"}}] }]
怎么做?
答案 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