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 に答える