建物とバス停の間の接続をマップするグラフデータベースがあります。グラフには、道路や交差点などの他の接続部分が含まれています(多くのノードタイプの中で)。
私が理解しようとしているのは、特定のノードタイプのみを返すようにパスをフィルタリングする方法です。私は現在苦労している2つの関連する質問があります。
質問1:パスに沿ってノードのラベルを返すにはどうすればよいですか?
論理的な最初のステップは、パスに沿って発生するノードのタイプを判別することのようです。
私は以下を試しました:
MATCH p=(a:Building)-[:CONNECTED_TO*..5]-(b:Bus)
WITH nodes(p) AS nodes
RETURN DISTINCT labels(nodes);
ただし、labels()がコレクションではなくノード型のデータを予期しているという型例外エラーが発生します。最終的にパスをフィルタリングできるように、パス上にあるノードのタイプを動的に知りたいのですが。
質問2:最初のステップで特定したラベルに一致するパス内のノードのサブセットを返すにはどうすればよいですか?
言ってやる私はその間ことを発見(a:Building)
し、(d1:Bus)
そして(d2:Bus)
、私が見つけることを期待することができ(:Intersection)
、ノードと(:Street)
ノードを。
これは私のグラフの単純化されたモデルです:
(a:Building)--(:Street)--(:Street)--(b1:Bus)
\(:Street)--(:Intersection)--(:Street)--(b2:Bus)
とノードMATCH
間のすべての可能なパスを探すステートメントを作成しました。ストリートノードを選択的に返すために、フィルターの次に何をする必要がありますか?(:Building)
(:Bus)
MATCH p=(a:Building)-[r:CONNECTED_TO*]-(b:Bus)
// Insert logic to only return (:Street) nodes from p
これに関するガイダンスをいただければ幸いです。
一致するパスに沿って個別のラベルを取得するには:
MATCH p=(a:Building)-[:CONNECTED_TO*..5]-(b:Bus)
WITH NODES(p) AS nodes
UNWIND nodes AS n
WITH LABELS(n) AS ls
UNWIND ls AS label
RETURN DISTINCT label;
Street
ラベルのあるノードを返します。
MATCH p=(a:Building)-[r:CONNECTED_TO*]-(b:Bus)
WITH NODES(p) AS nodes
UNWIND nodes AS n
WITH n
WHERE 'Street' IN LABELS(n)
RETURN n;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加