2

Neo4J データベースに 3 つの映画があるとします。

CREATE (interpreter:Movie {title: 'The Interpreter', year : 2005})
CREATE (dogville:Movie {title: 'Dogville', year : 2003})
CREATE (railwayMan:Movie {title: 'The Railway Man', year : 2013})

また、次のユーザーもいます。

CREATE (maciej:Person {name: 'Maciej Ziarko', birthYear: 1989})

映画を評価する人:

CREATE (maciej)-[:RATED {stars : 4, comment : "I liked that movie!" }]->(interpreter);

Cypher を使用すると、特定のユーザーが評価した映画を簡単に見つけることができます

MATCH (person:Person)-[:RATED]->(movie:Movie)
WHERE person.name = 'Maciej Ziarko'
RETURN movie.title

結果:

+-------------------+
| movie.title       |
+-------------------+
| "The Interpreter" |
+-------------------+
1 row

しかし、特定のユーザーによってまだ評価されていない映画を見つけるにはどうすればよいでしょうか?

4

2 に答える 2

4

次のようなものを使用できます。

MATCH (m:Movie) WHERE NOT (m)<-[:RATED]-() return m.title

WHEREを使用して存在しないパスをフィルタリングできます。http://docs.neo4j.org/chunked/milestone/query-where.html#where-filter-on-patterns-using-notNOT参照してください。

于 2013-10-23T14:19:46.703 に答える
0

ステファンの答えを読んだ後に私がしたこと:

MATCH (movie:Movie), (person:Person)
WHERE person.name = 'Maciej Ziarko' 
     AND (NOT (movie:Movie)<-[:RATED]-(person:Person))
RETURN movie.title

結果:

+-------------------+
| movie.title       |
+-------------------+
| "Dogville"        |
| "The Railway Man" |
+-------------------+
2 rows
于 2013-10-23T14:29:52.570 に答える