重要でない編集 - 重要な編集。cypher NOT INクエリー(オプション)一致
は、私は次のクエリを持っている:
MATCH (n)
WHERE (n:person) AND n.id in ['af97ab48544b'] // id is our system identifier
OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m)
WHERE (m:person OR m:dog OR m:cat)
RETURN n,r,m
このクエリは、特定の人と関係を持っているすべての人、犬や猫を返します。私はこのクエリの結果に含まれていないすべてのノード&の関係を受け取るようにそれを裏返したいと思います。
それはSQLだった場合、それは
select * from graph where id NOT IN (my_query)
だろう、私はOPTIONAL MATCHが問題の部分だと思います。私はどうしたらいいですか? アドバイスはありますか?
ありがとうございました。
- 重要な編集 -
やあみんな、私の質問が、私の要件を変更して申し訳ありませんが変更されました。特定のノード以外のすべてのグラフ(すべてのノードと関係)をIDで接続したり切断したりする必要があります。以下のクエリは機能していますが、より多くのIDが動作していない場合は、単一のIDに対してのみ動作します。
MATCH (n) WHERE (n:person)
OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m) WHERE (m:person OR m:dog OR m:cat)
WITH n,r,m
MATCH (excludeNode) WHERE excludeNode.id IN ['af97ab48544b']
WITH n,r,m,excludeNode WHERE NOT n.id = excludeNode.id AND (NOT m.id = excludeNode.id OR m is null)
RETURN n,m,r
代わりに、私は単純なクエリを試してみました:
MATCH (n) WHERE (n:person) AND NOT n.id IN ['af97ab48544b'] return n
しかし、この1は(私も切断ノードが必要覚えている)の関係を返していません。
グラフ全体を特定のノードから除外する方法を教えてください。それにはノードと関係、接続されたノードと切断されたものも含まれます。
明確にするために、あなたの人に接続されているすべてのノードを探しています:人/:犬/:猫のつながり:友人/:接続/:所有者の関係?あるいは、これらのノードとの関係が存在しない人すべてを見つけようとしていますか?または、あなたのクエリから:personノード(および接続されたノード)のいずれも含まない、グラフ全体のすべてのノードを見つけようとしていますか?望ましい出力の例は何ですか? – InverseFalcon
あなたのSQL文と問題の説明から、特定の 'id'で' person'に接続されていない 'person'、' dog'、 'cat'をすべて見つけたいと思いますか? –
私の最後の編集をお読みください。残念ながら私の要件は変更されました。 –