2013-11-08 5 views
0

В настоящее время у меня есть следующий cypher для возврата списка пользователей, с назначенными им Ролями и Приложением, для которого предназначена роль.Cypher: могу ли я вернуть коллекцию коллекций или подобное?

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.

Большое спасибо за вашу помощь :)

ответ

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 
Смежные вопросы