2

これは Neo4J 2.0.0-M04 で実行されています。データとクエリへのリンクは次のとおりです。 http://console.neo4j.org/?id=yybtki

クエリの目的は、Tom と同様の本を読んだことがある人から、Tom が読んでいない本を見つけることです。

FILTER 関数を使用したクエリ:

MATCH p1:Person-[:READS]->b1:Book<-[:READS]-p2:Person-[:READS]->b2:Book
WHERE p1.name = 'Tom' AND (p1-[:READS]->b1)
WITH COLLECT(b1) AS MyBooks, COLLECT(DISTINCT b2) AS OtherBooks
RETURN FILTER(x IN OtherBooks : NOT x IN MyBooks);

FILTER 関数を使用してクエリを正常に実行できましたが、WHERE 句でそれを行うためのより良い方法があるかどうか疑問に思っていました。

以下のようなものを試してもうまくいきません。

MATCH p1:Person-[:READS]->b1:Book<-[:READS]-p2:Person-[:READS]->b2:Book
WHERE p1.name = 'Tom' AND NOT (p1-[:READS]->b1)
RETURN b2;
4

1 に答える 1