これを行うにはいくつかの方法があります。
:TYPE関係の場合:AノードのみがBノードに接続し、それぞれ:Aノードと:Bノードの間にTYPE関係が1つしかない場合、最も速い方法は次の程度に基づいてフィルタリングすることです。 TYPE関係:Aノード:
MATCH (a:A)
WHERE SIZE((a)-[:TYPE]->()) = 2
RETURN a
:TYPE関係がBノード以上になる場合、クエリをわずかに変更できます。それは非常に効率的ではありませんが、それは正常に動作します:
MATCH (a:A)
WHERE SIZE((a)-[:TYPE]->(:B)) = 2
RETURN a
の数場合:Bが増加するノード、そしてあなたが探したい:すべてに接続するノード:Bノード、そして私達ができますノード:使用のコレクションだけでなく、ALL()関数は、の右のセットを取得する
MATCH (b:B)
WITH COLLECT(b) as bnodes
MATCH (a:A)
WHERE ALL(b in bnodes WHERE (b)<-[:TYPE]-(a))
RETURN a
をそしてあなただけのサブセットが必要な場合:代わりに、すべてのBノードを、あなたはあなたの最初の試合をフィルタリングすることができますidsのコレクションに基づいて:
// assuming you supply a list parameter of ids called 'ids'
MATCH (b:B)
WHERE b.id in {ids}
WITH COLLECT(b) as bnodes
WITH HEAD(bnodes) as first, bnodes
MATCH (a)-[:TYPE]->(first)
WHERE ALL(b in TAIL(bnodes) WHERE (b)<-[:TYPE]-(a))
RETURN a
あなたのbノードの要素の1つのタイプであるノードだけを考慮する余分なロジックがあります。そうすることで、私たちは決して考慮しません。ノードがあなたのノードのどれにも関係しないので、不要な比較を実行できなくなります。
これは私の望むもの以上の素晴らしい応答です。ありがとうございました! – lordingtar
あなたがこれらの他の状況に遭遇した場合、それが役立つことを願っています! – InverseFalcon