0

我目前有以下密码来返回用户列表,以及分配给他们的角色以及该角色所针对的应用程序。

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]...] 的东西来处理这个列表,假设它是角色,应用程序,角色,应用程序似乎没有喜欢我的好习惯。

我可以将角色和应用程序作为单独的集合返回,但是我不知道每个角色分配给哪个应用程序。我能想到的唯一其他方法是执行多个查询,我不想这样做。

我相信一定有更好的方法,也许使用 WITH,但我是 Cypher 的新手。

非常感谢您的帮助 :)

4

1 回答 1

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
于 2013-11-08T15:13:49.310 回答