に
Object network
私は、WITH句を使用して、2番目のクエリにレポートして、パイプの結果を見つけるために、クエリを実行しようとしていたが、私はCを除外することができなかった、D1およびDC私はそれが動作するクエリを見つけたと思うが、それは報告チェーンの外のノードだけを返す。同じクエリでa)とb)の両方を返すのは難しいかもしれません。
まず、グラフ(私は小文字を使用している以外、あなたの図と一致する必要があります)作成:今、クエリ
MATCH (:Person{name:"a"})<-[:REPORTS_TO*]-(reporter:Person)-[:KNOWS]-(other:Person)
WITH COLLECT(reporter) AS reporters, COLLECT(other) AS others
WITH FILTER (o IN others WHERE NOT o IN reporters) AS outsiders
UNWIND outsiders AS outsider
RETURN DISTINCT outsider
のためにこれは人々Z、Wを返します
merge (a:Person{name:"a"})
merge (b:Person{name:"b"})
merge (c:Person{name:"c"})
merge (d:Person{name:"d"})
merge (b1:Person{name:"b1"})
merge (b2:Person{name:"b2"})
merge (b11:Person{name:"b11"})
merge (d1:Person{name:"d1"})
merge (d2:Person{name:"d2"})
merge (z:Person{name:"z"})
merge (w:Person{name:"w"})
merge (x:Person{name:"x"})
merge (b)-[:REPORTS_TO]->(a)
merge (c)-[:REPORTS_TO]->(a)
merge (d)-[:REPORTS_TO]->(a)
merge (b1)-[:REPORTS_TO]->(b)
merge (b2)-[:REPORTS_TO]->(b)
merge (b11)-[:REPORTS_TO]->(b1)
merge (d1)-[:REPORTS_TO]->(d)
merge (d2)-[:REPORTS_TO]->(d)
merge (z)-[:KNOWS]->(b)
merge (z)-[:KNOWS]->(b11)
merge (b2)-[:KNOWS]->(w)
merge (b2)-[:KNOWS]->(c)
merge (b2)-[:KNOWS]->(d1)
merge (d1)-[:KNOWS]->(x)
merge (c)-[:KNOWS]->(d2)
をし、おそらくもっと洗練された解決策がありますが、私はまだそれを見つけていません。明白な目に隠れているのだろうか?
単一のクエリを使用してa)とb)の両方を返そうとしていますか?または、報告チェーンにいる人がいなくても、b)の結果だけに興味がありますか? – InverseFalcon