0

2 つのノード間の最短パスを見つけるクエリがあります。これらのノードはデバイスとしてラベル付けされていますが、アプリ ノードにも接続されています。したがって、2 つの app_id があり、これらの ID によって、これらの app_id に関連する 2 つのデバイス間のすべての接続と、これらの接続で影響を受けるすべてのデバイスに関する情報を見つけたいと思います。だから私はこのクエリを持っていました:

WITH ["000001", "000002"] as IDS
UNWIND IDS as app_ids
MATCH (d:Device)-[:DEV_APP]->(a:Apps {app_id: app_ids})
WITH COLLECT(d) as device, COLLECT(distinct a) as app
WITH device[1] as first, device[7] as second, app
WITH first.device_id AS id1, second.device_id as id2, application
MATCH path=allShortestPaths((d1:Device {device_id:id1})-[:DEV_COL1|DEV_COL2|:DEV_COL3*..5]->(d2:Device {device_id:id2}))
RETURN path, application

このクエリは、ノード間のすべてのパスを返しますが、影響を受けるデバイスに接続されているすべてのアプリに関するデータも必要です。結果として、すべてのデバイス ノード データと 2 つのアプリ ノード データのみを取得します。最初の Match クエリで Apps ノードをフィルタリングしたために発生することを理解しています。そこで、影響を受けるデバイスに関連するすべてのアプリ データをクエリで検索するために、次のようなことを試みました。

WITH ["000001", "000002"] as IDS
UNWIND IDS as app_ids
MATCH (d:Device)-[:DEV_APP]->(a:Apps {app_id: app_ids})
WITH COLLECT(d) as device, COLLECT(distinct a) as app, COLLECT(distinct d.device_id) as device_ids
MATCH (d_all:Device {device_id: device_ids})-[:DEV_APP]->(a_all:Apps)
WITH device[1] as first, device[7] as second, app, COLLECT(a_all) as apps
WITH first.device_id AS id1, second.device_id as id2, application, apps
MATCH path=allShortestPaths((d1:Device {device_id:id1})-[:DEV_COL1|DEV_COL2|:DEV_COL3*..5]->(d2:Device {device_id:id2}))
RETURN path, application, apps

問題は、結果としてレコードが得られないことです。ただし、ノードの device_ids リストが空でないことを確認しました。このクエリの一部を個別に実行すると、結果は正常に表示されます。このクエリのどこが間違っている可能性がありますか?

4

1 に答える 1