我目前有以下密码返回用户列表,其中包含已分配的角色以及角色所针对的应用程序。
MATCH (u:User)-[:HAS_ROLE]->(r:Role)-[:ROLE_OF]->(a:App)
RETURN u as User, COLLECT([r, a]) as Roles
这将返回一个用户及其角色和应用程序的集合,但该集合只是[roleA,appA,roleB,appA,roleC,appB ...]。
是否有办法返回类似[[roleA,appA],[roleB,appA],[roleC,appB] ...]这样的内容,因为假设它是角色,应用,角色,app对我来说似乎不是好习惯。
我可以将角色和应用程序作为单独的集合返回,但后来我不知道每个角色分配给哪个应用程序。 我能想到的另一种方法是执行多个查询,我不想这样做。
我确信必须有更好的方法,也许使用WITH,但我是Cypher的新手。
非常感谢你的帮助:)。
答案 0 :(得分:1)
您的查询似乎对我有用。
http://console.neo4j.org/r/4zp6uv
输出结果为:
+--------------------------------------------------------------------------------------------------------+
| User | Roles |
+--------------------------------------------------------------------------------------------------------+
| Node[5]{name:"u1"} | [[Node[4]{name:"r1"},Node[2]{name:"a1"}],[Node[3]{name:"r2"},Node[1]{name:"a2"}]] |
+--------------------------------------------------------------------------------------------------------+
1 row
14 ms
如果由于某种原因您仍然遇到某些问题,您可以尝试稍微修改一下这个问题,以便将其分解。
MATCH (u:User)-[:HAS_ROLE]->(r:Role)-[:ROLE_OF]->(a:App)
WITH u, [r, a] as tuple
RETURN u as User, COLLECT(tuple) as Roles