web-dev-qa-db-ja.com

neo4jですべての接続ノードを取得する方法

enter image description here

図に示すように、ノード0から始まるすべての接続ノードのリストを取得したい

16
chetan dev

あなたのコメントに基づいて:

接続されているすべてのノードのリストを取得したい。たとえば、上記の場合、接続されているノードを0で検索すると、nodes-1、2、3が返されます。

このクエリはあなたが望むことをします:

MATCH ({id : 0})-[*]-(connected)
RETURN connected

上記のクエリは、id=0のノードに接続されたすべてのノードを返します(ノード内の数値はidプロパティの値であると考えています)。ドキュメントのセクション 深さの関係 を見てください。

これは小さなグラフでは問題なく機能しますが、これは非常に負荷の高い操作であることに注意してください。グラフ全体startingを始点({id : 0})から開始し、関係タイプを考慮します。これは、実際の運用環境にはあまり適していません。

12
Bruno Peres

別のノードと関係があるノードを一致させる場合は、次のように使用できます。

MATCH (n) MATCH (n)-[r]-() RETURN n,r

関係の方向に関係なく、別のノードとの関係を持つすべてのノードが返されます。

制約を追加したい場合は、次の方法で行うことができます。

MATCH (n:Label {id:"id"}) MATCH (n)-[r]-() RETURN n,r
5
Trishant Pahwa

より大きな、またはより強く相互接続されたグラフの場合、 APOC Procedures は、サブグラフ内のすべてのノードを返すより効率的なトラバーサル手段を提供します。

他の人がすでに述べたように、ノードでラベルを使用し、開始ノードの高速ルックアップのためにラベルまたはプロパティにインデックスまたは一意の制約を追加するのが最善です。

「Label」のラベルとidParamのパラメーターを使用して、APOCでサブグラフのノードを取得するクエリは次のようになります。

_MATCH (n:Label {id:$idParam})
CALL apoc.path.subgraphNodes(n, {minLevel:1}) YIELD node
RETURN node
_

ノードは区別され、開始ノードは残りとともに返されません。

編集

現在、subgraphNodes()minLevelを使用できないようにする制限があります。開始ノードを自分で除外するか、_uniqueness:'NODE_GLOBAL'_を使用してapoc.path.expandConfig()を使用して取得できます。同じ効果。

4
InverseFalcon